Skip to content

Commit cbe6907

Browse files
committed
Fix PortHandler
1 parent d92a49a commit cbe6907

File tree

3 files changed

+64
-61
lines changed

3 files changed

+64
-61
lines changed

src/js/port_handler.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ PortHandler.initialize = function () {
2121
const portPickerElementSelector = "div#port-picker #port";
2222
this.portPickerElement = $(portPickerElementSelector);
2323
this.selectList = document.querySelector(portPickerElementSelector);
24-
this.initialWidth = this.selectList.offsetWidth + 12;
24+
this.initialWidth = this.selectList.offsetWidth;
25+
26+
ConfigStorage.get('showVirtualMode', res => self.showVirtualMode = res.showVirtualMode);
27+
ConfigStorage.get('showAllSerialDevices', res => self.showAllSerialDevices = res.showAllSerialDevices);
2528

2629
// fill dropdown with version numbers
2730
generateVirtualApiVersions();
@@ -33,13 +36,13 @@ PortHandler.initialize = function () {
3336
PortHandler.check = function () {
3437
const self = this;
3538

36-
ConfigStorage.get('showVirtualMode', res => self.showVirtualMode = res.showVirtualMode);
37-
ConfigStorage.get('showAllSerialDevices', res => self.showAllSerialDevices = res.showAllSerialDevices);
38-
39-
self.check_usb_devices();
40-
self.check_serial_devices();
39+
if (!self.port_available) {
40+
self.check_usb_devices();
41+
}
4142

42-
GUI.updateManualPortVisibility();
43+
if (!self.dfu_available) {
44+
self.check_serial_devices();
45+
}
4346

4447
setTimeout(function () {
4548
self.check();
@@ -84,14 +87,6 @@ PortHandler.check_usb_devices = function (callback) {
8487
data: {isDFU: true},
8588
}));
8689

87-
if (self.showVirtualMode) {
88-
self.portPickerElement.append($('<option/>', {
89-
value: 'virtual',
90-
text: i18n.getMessage('portsSelectVirtual'),
91-
data: {isVirtual: true},
92-
}));
93-
}
94-
9590
self.portPickerElement.append($('<option/>', {
9691
value: 'manual',
9792
text: i18n.getMessage('portsSelectManual'),
@@ -109,14 +104,16 @@ PortHandler.check_usb_devices = function (callback) {
109104
}
110105
self.dfu_available = false;
111106
}
112-
if(callback) {
107+
if (callback) {
113108
callback(self.dfu_available);
114109
}
115110
if (!$('option:selected', self.portPickerElement).data().isDFU) {
116111
if (!(GUI.connected_to || GUI.connect_lock)) {
117112
FC.resetState();
118113
}
119-
self.portPickerElement.trigger('change');
114+
if (self.dfu_available) {
115+
self.portPickerElement.trigger('change');
116+
}
120117
}
121118
});
122119
};
@@ -156,6 +153,7 @@ PortHandler.removePort = function(currentPorts) {
156153
self.initialPorts.splice(self.initialPorts.indexOf(removePorts[i]), 1);
157154
}
158155
self.updatePortSelect(self.initialPorts);
156+
self.portPickerElement.trigger('change');
159157
}
160158
};
161159

@@ -186,6 +184,8 @@ PortHandler.detectPort = function(currentPorts) {
186184
TABS.firmware_flasher.boardNeedsVerification = true;
187185
}
188186

187+
self.portPickerElement.trigger('change');
188+
189189
// auto-connect if enabled
190190
if (GUI.auto_connect && !GUI.connecting_to && !GUI.connected_to) {
191191
// start connect procedure. We need firmware flasher protection over here
@@ -267,7 +267,7 @@ PortHandler.selectPort = function(ports) {
267267
const pathSelect = ports[i].path;
268268
const isWindows = (OS === 'Windows');
269269
const isTty = pathSelect.includes('tty');
270-
const deviceRecognized = portName.includes('STM') || portName.includes('CP210');
270+
const deviceRecognized = portName.includes('STM') || portName.includes('CP210') || portName.startsWith('SPR');
271271
const legacyDeviceRecognized = portName.includes('usb');
272272
if (isWindows && deviceRecognized || isTty && (deviceRecognized || legacyDeviceRecognized)) {
273273
this.portPickerElement.val(pathSelect);
@@ -293,7 +293,7 @@ PortHandler.setPortsInputWidth = function() {
293293
return max;
294294
}
295295

296-
const correction = 24; // account for up/down button and spacing
296+
const correction = 32; // account for up/down button and spacing
297297
let width = findMaxLengthOption(this.selectList) + correction;
298298

299299
width = (width > this.initialWidth) ? width : this.initialWidth;

src/js/serial_backend.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ let connectionTimestamp;
55
let clicks = false;
66

77
function initializeSerialBackend() {
8-
GUI.updateManualPortVisibility = function(){
8+
GUI.updateManualPortVisibility = function() {
99
const selected_port = $('div#port-picker #port option:selected');
1010
if (selected_port.data().isManual) {
1111
$('#port-override-option').show();
@@ -19,12 +19,8 @@ function initializeSerialBackend() {
1919
else {
2020
$('#firmware-virtual-option').hide();
2121
}
22-
if (selected_port.data().isDFU) {
23-
$('select#baud').hide();
24-
}
25-
else {
26-
$('select#baud').show();
27-
}
22+
23+
$('#auto-connect-and-baud').toggle(!selected_port.data().isDFU);
2824
};
2925

3026
GUI.updateManualPortVisibility();

src/js/tabs/firmware_flasher.js

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -851,15 +851,24 @@ firmware_flasher.initialize = function (callback) {
851851
if (String(portPickerElement.val()) !== '0') {
852852
const port = String(portPickerElement.val());
853853
let baud = 115200;
854+
854855
if ($('input.flash_manual_baud').is(':checked')) {
855856
baud = parseInt($('#flash_manual_baud_rate').val());
856857
}
858+
857859
GUI.log(i18n.getMessage('firmwareFlasherDetectBoardQuery'));
858-
if (!(serial.connected || serial.connectionId)) {
859-
serial.connect(port, {bitrate: baud}, onConnect);
860+
861+
const isLoaded = self.releases ? Object.keys(self.releases).length > 0 : false;
862+
863+
if (isLoaded) {
864+
if (!(serial.connected || serial.connectionId)) {
865+
serial.connect(port, {bitrate: baud}, onConnect);
866+
} else {
867+
console.warn('Attempting to connect while there still is a connection', serial.connected, serial.connectionId);
868+
serial.disconnect();
869+
}
860870
} else {
861-
console.warn('Attempting to connect while there still is a connection', serial.connected, serial.connectionId);
862-
serial.disconnect();
871+
console.log('Releases not loaded yet');
863872
}
864873
} else {
865874
GUI.log(i18n.getMessage('firmwareFlasherNoValidPort'));
@@ -868,32 +877,24 @@ firmware_flasher.initialize = function (callback) {
868877
}
869878

870879
const detectBoardElement = $('a.detect-board');
871-
let isClickable = true;
872880

873881
detectBoardElement.on('click', () => {
874882
detectBoardElement.addClass('disabled');
875883

876-
if (isClickable) {
877-
isClickable = false;
878-
verifyBoard();
879-
setTimeout(() => isClickable = true, 1000);
880-
}
884+
verifyBoard();
885+
886+
setTimeout(() => detectBoardElement.removeClass('disabled'), 1000);
881887
});
882888

883889
function updateDetectBoardButton() {
884-
const isDfu = portPickerElement.val().includes('DFU');
890+
const isDfu = PortHandler.dfu_available;
885891
const isBusy = GUI.connect_lock;
886-
const isLoaded = self.releases ? Object.keys(self.releases).length > 0 : false;
887-
const isAvailable = PortHandler.port_available || false;
888-
const isButtonDisabled = isDfu || isBusy || !isLoaded || !isAvailable;
892+
const isAvailable = PortHandler.port_available;
893+
const isButtonDisabled = isDfu || isBusy || !isAvailable;
889894

890895
detectBoardElement.toggleClass('disabled', isButtonDisabled);
891896
}
892897

893-
document.querySelector('select[name="build_type"]').addEventListener('change', updateDetectBoardButton);
894-
document.querySelector('select[name="board"]').addEventListener('change', updateDetectBoardButton);
895-
document.querySelector('select[name="firmware_version"]').addEventListener('change', updateDetectBoardButton);
896-
897898
ConfigStorage.get('erase_chip', function (result) {
898899
if (result.erase_chip) {
899900
$('input.erase_chip').prop('checked', true);
@@ -1125,11 +1126,14 @@ firmware_flasher.initialize = function (callback) {
11251126
});
11261127

11271128
const exitDfuElement = $('a.exit_dfu');
1129+
11281130
exitDfuElement.click(function () {
1129-
if (!$(this).hasClass('disabled')) {
1131+
if (!exitDfuElement.hasClass('disabled')) {
1132+
exitDfuElement.addClass("disabled");
11301133
if (!GUI.connect_lock) { // button disabled while flashing is in progress
11311134
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLASHING, 'ExitDfu', null);
11321135
try {
1136+
console.log('Closing DFU');
11331137
STM32DFU.connect(usbDevices, self.parsed_hex, { exitDfu: true });
11341138
} catch (e) {
11351139
console.log(`Exiting DFU failed: ${e.message}`);
@@ -1138,25 +1142,27 @@ firmware_flasher.initialize = function (callback) {
11381142
}
11391143
});
11401144

1141-
portPickerElement.change(function () {
1142-
if (!GUI.connect_lock) {
1143-
if ($('option:selected', this).data().isDFU) {
1144-
exitDfuElement.removeClass('disabled');
1145-
} else {
1146-
// Porthandler resets board on port detect
1147-
if (self.boardNeedsVerification) {
1148-
// reset to prevent multiple calls
1149-
self.boardNeedsVerification = false;
1150-
verifyBoard();
1151-
}
1145+
portPickerElement.on('change', function () {
1146+
if (GUI.active_tab === 'firmware_flasher') {
1147+
if (!GUI.connect_lock) {
1148+
if ($('option:selected', this).data().isDFU) {
1149+
exitDfuElement.removeClass('disabled');
1150+
} else {
1151+
// Porthandler resets board on port detect
1152+
if (self.boardNeedsVerification) {
1153+
// reset to prevent multiple calls
1154+
self.boardNeedsVerification = false;
1155+
verifyBoard();
1156+
}
11521157

1153-
$("a.load_remote_file").removeClass('disabled');
1154-
$("a.load_file").removeClass('disabled');
1155-
exitDfuElement.addClass('disabled');
1158+
$("a.load_remote_file").removeClass('disabled');
1159+
$("a.load_file").removeClass('disabled');
1160+
exitDfuElement.addClass('disabled');
1161+
}
11561162
}
1163+
updateDetectBoardButton();
11571164
}
1158-
updateDetectBoardButton();
1159-
}).change();
1165+
}).trigger('change');
11601166

11611167
$('a.flash_firmware').click(function () {
11621168
if (!$(this).hasClass('disabled')) {
@@ -1226,6 +1232,7 @@ firmware_flasher.initialize = function (callback) {
12261232

12271233
function startFlashing() {
12281234
exitDfuElement.addClass('disabled');
1235+
$('a.flash_firmware').addClass('disabled');
12291236
$("a.load_remote_file").addClass('disabled');
12301237
$("a.load_file").addClass('disabled');
12311238
if (!GUI.connect_lock) { // button disabled while flashing is in progress

0 commit comments

Comments
 (0)