Skip to content

Commit 0b8f3d8

Browse files
committed
Fix PortHandler
1 parent ee3ddc1 commit 0b8f3d8

File tree

3 files changed

+64
-64
lines changed

3 files changed

+64
-64
lines changed

src/js/port_handler.js

Lines changed: 19 additions & 22 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+
this.showVirtualMode = ConfigStorage.get('showVirtualMode').showVirtualMode;
27+
this.showAllSerialDevices = ConfigStorage.get('showAllSerialDevices').showAllSerialDevices;
2528

2629
// fill dropdown with version numbers
2730
generateVirtualApiVersions();
@@ -32,17 +35,14 @@ PortHandler.initialize = function () {
3235

3336
PortHandler.check = function () {
3437
const self = this;
35-
let result;
36-
37-
result = ConfigStorage.get('showVirtualMode');
38-
self.showVirtualMode = result.showVirtualMode;
39-
result = ConfigStorage.get('showAllSerialDevices');
40-
self.showAllSerialDevices = result.showAllSerialDevices;
4138

42-
self.check_usb_devices();
43-
self.check_serial_devices();
39+
if (!self.port_available) {
40+
self.check_usb_devices();
41+
}
4442

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

4747
setTimeout(function () {
4848
self.check();
@@ -87,14 +87,6 @@ PortHandler.check_usb_devices = function (callback) {
8787
data: {isDFU: true},
8888
}));
8989

90-
if (self.showVirtualMode) {
91-
self.portPickerElement.append($('<option/>', {
92-
value: 'virtual',
93-
text: i18n.getMessage('portsSelectVirtual'),
94-
data: {isVirtual: true},
95-
}));
96-
}
97-
9890
self.portPickerElement.append($('<option/>', {
9991
value: 'manual',
10092
text: i18n.getMessage('portsSelectManual'),
@@ -112,14 +104,16 @@ PortHandler.check_usb_devices = function (callback) {
112104
}
113105
self.dfu_available = false;
114106
}
115-
if(callback) {
107+
if (callback) {
116108
callback(self.dfu_available);
117109
}
118110
if (!$('option:selected', self.portPickerElement).data().isDFU) {
119111
if (!(GUI.connected_to || GUI.connect_lock)) {
120112
FC.resetState();
121113
}
122-
self.portPickerElement.trigger('change');
114+
if (self.dfu_available) {
115+
self.portPickerElement.trigger('change');
116+
}
123117
}
124118
});
125119
};
@@ -159,6 +153,7 @@ PortHandler.removePort = function(currentPorts) {
159153
self.initialPorts.splice(self.initialPorts.indexOf(removePorts[i]), 1);
160154
}
161155
self.updatePortSelect(self.initialPorts);
156+
self.portPickerElement.trigger('change');
162157
}
163158
};
164159

@@ -188,6 +183,8 @@ PortHandler.detectPort = function(currentPorts) {
188183
TABS.firmware_flasher.boardNeedsVerification = true;
189184
}
190185

186+
self.portPickerElement.trigger('change');
187+
191188
// auto-connect if enabled
192189
if (GUI.auto_connect && !GUI.connecting_to && !GUI.connected_to) {
193190
// start connect procedure. We need firmware flasher protection over here
@@ -269,7 +266,7 @@ PortHandler.selectPort = function(ports) {
269266
const pathSelect = ports[i].path;
270267
const isWindows = (OS === 'Windows');
271268
const isTty = pathSelect.includes('tty');
272-
const deviceRecognized = portName.includes('STM') || portName.includes('CP210');
269+
const deviceRecognized = portName.includes('STM') || portName.includes('CP210') || portName.startsWith('SPR');
273270
const legacyDeviceRecognized = portName.includes('usb');
274271
if (isWindows && deviceRecognized || isTty && (deviceRecognized || legacyDeviceRecognized)) {
275272
this.portPickerElement.val(pathSelect);
@@ -295,7 +292,7 @@ PortHandler.setPortsInputWidth = function() {
295292
return max;
296293
}
297294

298-
const correction = 24; // account for up/down button and spacing
295+
const correction = 32; // account for up/down button and spacing
299296
let width = findMaxLengthOption(this.selectList) + correction;
300297

301298
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
@@ -847,15 +847,24 @@ firmware_flasher.initialize = function (callback) {
847847
if (String(portPickerElement.val()) !== '0') {
848848
const port = String(portPickerElement.val());
849849
let baud = 115200;
850+
850851
if ($('input.flash_manual_baud').is(':checked')) {
851852
baud = parseInt($('#flash_manual_baud_rate').val());
852853
}
854+
853855
GUI.log(i18n.getMessage('firmwareFlasherDetectBoardQuery'));
854-
if (!(serial.connected || serial.connectionId)) {
855-
serial.connect(port, {bitrate: baud}, onConnect);
856+
857+
const isLoaded = self.releases ? Object.keys(self.releases).length > 0 : false;
858+
859+
if (isLoaded) {
860+
if (!(serial.connected || serial.connectionId)) {
861+
serial.connect(port, {bitrate: baud}, onConnect);
862+
} else {
863+
console.warn('Attempting to connect while there still is a connection', serial.connected, serial.connectionId);
864+
serial.disconnect();
865+
}
856866
} else {
857-
console.warn('Attempting to connect while there still is a connection', serial.connected, serial.connectionId);
858-
serial.disconnect();
867+
console.log('Releases not loaded yet');
859868
}
860869
} else {
861870
GUI.log(i18n.getMessage('firmwareFlasherNoValidPort'));
@@ -864,32 +873,24 @@ firmware_flasher.initialize = function (callback) {
864873
}
865874

866875
const detectBoardElement = $('a.detect-board');
867-
let isClickable = true;
868876

869877
detectBoardElement.on('click', () => {
870878
detectBoardElement.addClass('disabled');
871879

872-
if (isClickable) {
873-
isClickable = false;
874-
verifyBoard();
875-
setTimeout(() => isClickable = true, 1000);
876-
}
880+
verifyBoard();
881+
882+
setTimeout(() => detectBoardElement.removeClass('disabled'), 1000);
877883
});
878884

879885
function updateDetectBoardButton() {
880-
const isDfu = portPickerElement.val().includes('DFU');
886+
const isDfu = PortHandler.dfu_available;
881887
const isBusy = GUI.connect_lock;
882-
const isLoaded = self.releases ? Object.keys(self.releases).length > 0 : false;
883-
const isAvailable = PortHandler.port_available || false;
884-
const isButtonDisabled = isDfu || isBusy || !isLoaded || !isAvailable;
888+
const isAvailable = PortHandler.port_available;
889+
const isButtonDisabled = isDfu || isBusy || !isAvailable;
885890

886891
detectBoardElement.toggleClass('disabled', isButtonDisabled);
887892
}
888893

889-
document.querySelector('select[name="build_type"]').addEventListener('change', updateDetectBoardButton);
890-
document.querySelector('select[name="board"]').addEventListener('change', updateDetectBoardButton);
891-
document.querySelector('select[name="firmware_version"]').addEventListener('change', updateDetectBoardButton);
892-
893894
let result = ConfigStorage.get('erase_chip');
894895
if (result.erase_chip) {
895896
$('input.erase_chip').prop('checked', true);
@@ -1114,11 +1115,14 @@ firmware_flasher.initialize = function (callback) {
11141115
});
11151116

11161117
const exitDfuElement = $('a.exit_dfu');
1118+
11171119
exitDfuElement.click(function () {
1118-
if (!$(this).hasClass('disabled')) {
1120+
if (!exitDfuElement.hasClass('disabled')) {
1121+
exitDfuElement.addClass("disabled");
11191122
if (!GUI.connect_lock) { // button disabled while flashing is in progress
11201123
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLASHING, 'ExitDfu', null);
11211124
try {
1125+
console.log('Closing DFU');
11221126
STM32DFU.connect(usbDevices, self.parsed_hex, { exitDfu: true });
11231127
} catch (e) {
11241128
console.log(`Exiting DFU failed: ${e.message}`);
@@ -1127,25 +1131,27 @@ firmware_flasher.initialize = function (callback) {
11271131
}
11281132
});
11291133

1130-
portPickerElement.change(function () {
1131-
if (!GUI.connect_lock) {
1132-
if ($('option:selected', this).data().isDFU) {
1133-
exitDfuElement.removeClass('disabled');
1134-
} else {
1135-
// Porthandler resets board on port detect
1136-
if (self.boardNeedsVerification) {
1137-
// reset to prevent multiple calls
1138-
self.boardNeedsVerification = false;
1139-
verifyBoard();
1140-
}
1134+
portPickerElement.on('change', function () {
1135+
if (GUI.active_tab === 'firmware_flasher') {
1136+
if (!GUI.connect_lock) {
1137+
if ($('option:selected', this).data().isDFU) {
1138+
exitDfuElement.removeClass('disabled');
1139+
} else {
1140+
// Porthandler resets board on port detect
1141+
if (self.boardNeedsVerification) {
1142+
// reset to prevent multiple calls
1143+
self.boardNeedsVerification = false;
1144+
verifyBoard();
1145+
}
11411146

1142-
$("a.load_remote_file").removeClass('disabled');
1143-
$("a.load_file").removeClass('disabled');
1144-
exitDfuElement.addClass('disabled');
1147+
$("a.load_remote_file").removeClass('disabled');
1148+
$("a.load_file").removeClass('disabled');
1149+
exitDfuElement.addClass('disabled');
1150+
}
11451151
}
1152+
updateDetectBoardButton();
11461153
}
1147-
updateDetectBoardButton();
1148-
}).change();
1154+
}).trigger('change');
11491155

11501156
$('a.flash_firmware').click(function () {
11511157
if (!$(this).hasClass('disabled')) {
@@ -1214,6 +1220,7 @@ firmware_flasher.initialize = function (callback) {
12141220

12151221
function startFlashing() {
12161222
exitDfuElement.addClass('disabled');
1223+
$('a.flash_firmware').addClass('disabled');
12171224
$("a.load_remote_file").addClass('disabled');
12181225
$("a.load_file").addClass('disabled');
12191226
if (!GUI.connect_lock) { // button disabled while flashing is in progress

0 commit comments

Comments
 (0)