Make firmware flasher more robust

Check for DFU/serial port regularly during 10 seconds instead of
waiting 1s and trying once. Also, make sure that we don't mistake
DFU devices with serial ones, since the serial port might appear
briefly while the FC is rebooting.
pull/752/head
Alberto García Hierro 5 years ago committed by Pawel Spychalski (DzikuVx)
parent c20fff75b2
commit 9e81e6dbb1

@ -100,25 +100,45 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
serial.send(bufferOut, function () {
serial.disconnect(function (result) {
if (result) {
// delay to allow board to boot in bootloader mode
// required to detect if a DFU device appears
setTimeout(function() {
// refresh device list
var intervalMs = 200;
var retries = 0;
var maxRetries = 50; // timeout after intervalMs * 50
var interval = setInterval(function() {
var tryFailed = function() {
retries++;
if (retries > maxRetries) {
clearInterval(interval);
GUI.log('<span style="color: red">Failed</span> to flash ' + port);
}
}
// Check for DFU devices
PortHandler.check_usb_devices(function(dfu_available) {
if(dfu_available) {
if (dfu_available) {
clearInterval(interval);
STM32DFU.connect(usbDevices.STM32DFU, hex, options);
} else {
serial.connect(port, {bitrate: self.baud, parityBit: 'even', stopBits: 'one'}, function (openInfo) {
if (openInfo) {
self.initialize();
} else {
GUI.connect_lock = false;
GUI.log('<span style="color: red">Failed</span> to open serial port');
}
});
return;
}
// Check for the serial port
serial.getDevices(function(devices) {
if (devices && devices.includes(port)) {
// Serial port might briefly reappear on DFU devices while
// the FC is rebooting, so we don't clear the interval
// until we succesfully connect.
serial.connect(port, {bitrate: self.baud, parityBit: 'even', stopBits: 'one'}, function (openInfo) {
if (openInfo) {
clearInterval(interval);
self.initialize();
} else {
GUI.connect_lock = false;
tryFailed();
}
});
return;
}
tryFailed();
});
});
}, 1000);
}, intervalMs);
} else {
GUI.connect_lock = false;
}

Loading…
Cancel
Save