From 249345bedab6b1aa9d2d1a3e226a2935d6a42c63 Mon Sep 17 00:00:00 2001 From: ctzsnooze Date: Sun, 27 Feb 2022 14:39:31 +1100 Subject: [PATCH] check every 100ms for DFU mode --- src/js/protocols/stm32.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/js/protocols/stm32.js b/src/js/protocols/stm32.js index 7f2c31bb..f71d2afc 100644 --- a/src/js/protocols/stm32.js +++ b/src/js/protocols/stm32.js @@ -114,10 +114,26 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback) const onDisconnect = disconnectionResult => { if (disconnectionResult) { - // delay to allow board to boot in bootloader mode - // required to detect if a DFU device appears - // MacOs seems to need about 5 seconds delay - setTimeout(startFlashing, GUI.operating_system === 'MacOS' ? 5000 : 1000); + // wait until board boots into bootloader mode + // MacOs may need 5 seconds delay + function waitForDfu() { + if (PortHandler.dfu_available) { + console.log(`DFU available after ${failedAttempts / 10} seconds`); + clearInterval(dfuWaitInterval); + startFlashing(); + } else { + failedAttempts++; + if (failedAttempts > 100) { + clearInterval(dfuWaitInterval); + console.log(`failed to get DFU connection, gave up after 10 seconds`); + GUI.log(i18n.getMessage('serialPortOpenFail')); + GUI.connect_lock = false; + } + } + } + + let failedAttempts = 0; + const dfuWaitInterval = setInterval(waitForDfu, 100); } else { GUI.connect_lock = false; }