diff options
author | Mark Haslinghuis <mark@numloq.nl> | 2022-02-28 06:02:02 +0300 |
---|---|---|
committer | Mark Haslinghuis <mark@numloq.nl> | 2022-02-28 17:51:14 +0300 |
commit | f8371afca29dbf8fcfb1814be378733f39fb98b6 (patch) | |
tree | 65c857a2d86281245a92905d06be127a3595505a | |
parent | 989816a2e121702aafd0092ed7e2a94ce7b218f1 (diff) |
Make connection timeout dynamic
-rw-r--r-- | src/js/port_handler.js | 10 | ||||
-rw-r--r-- | src/js/serial_backend.js | 36 | ||||
-rw-r--r-- | src/js/tabs/options.js | 13 | ||||
-rw-r--r-- | src/tabs/options.html | 11 |
4 files changed, 23 insertions, 47 deletions
diff --git a/src/js/port_handler.js b/src/js/port_handler.js index ee01a1f5..d73b00b6 100644 --- a/src/js/port_handler.js +++ b/src/js/port_handler.js @@ -190,15 +190,7 @@ PortHandler.detectPort = function(currentPorts) { if (GUI.auto_connect && !GUI.connecting_to && !GUI.connected_to) { // start connect procedure. We need firmware flasher protection over here if (GUI.active_tab !== 'firmware_flasher') { - let connectionTimeout = 100; - ConfigStorage.get('connectionTimeout', function (result) { - if (result.connectionTimeout) { - connectionTimeout = result.connectionTimeout; - } - GUI.timeout_add('auto-connect_timeout', function () { - $('div#header_btns a.connect').click(); - }, connectionTimeout); // timeout so bus have time to initialize after being detected by the system - }); + $('div#header_btns a.connect').click(); } } // trigger callbacks diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index da8e48ed..5fa6680b 100644 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -830,6 +830,8 @@ function update_dataflash_global() { function reinitializeConnection(originatorTab, callback) { // Close connection gracefully if it still exists. + const previousTimeStamp = connectionTimestamp; + if (serial.connectionId) { if (GUI.connected_to || GUI.connecting_to) { $('a.connect').trigger('click'); @@ -840,19 +842,25 @@ function reinitializeConnection(originatorTab, callback) { GUI.log(i18n.getMessage('deviceRebooting')); - let connectionTimeout = 200; - const result = ConfigStorage.get('connectionTimeout'); - - if (result.connectionTimeout) { - connectionTimeout = result.connectionTimeout; + let attempts = 0; + const reconnect = setInterval(waitforSerial, 100); + + function waitforSerial() { + if (connectionTimestamp !== previousTimeStamp && CONFIGURATOR.connectionValid) { + console.log(`Serial connection available after ${attempts / 10} seconds`); + clearInterval(reconnect); + MSP.promise(MSPCodes.MSP_STATUS).then(() => { + GUI.log(i18n.getMessage('deviceReady')); + originatorTab.initialize(false, $('#content').scrollTop()); + callback?.(); + }); + } else { + attempts++; + if (attempts > 100) { + clearInterval(reconnect); + console.log(`failed to get serial connection, gave up after 10 seconds`); + GUI.log(i18n.getMessage('serialPortOpenFail')); + } + } } - - setTimeout(() => { - MSP.send_message(MSPCodes.MSP_STATUS, false, false, () => { - GUI.log(i18n.getMessage('deviceReady')); - originatorTab.initialize(false, $('#content').scrollTop()); - }); - - callback?.(); - }, connectionTimeout); } diff --git a/src/js/tabs/options.js b/src/js/tabs/options.js index 62d852bb..6f14089f 100644 --- a/src/js/tabs/options.js +++ b/src/js/tabs/options.js @@ -14,7 +14,6 @@ options.initialize = function (callback) { TABS.options.initCheckForConfiguratorUnstableVersions(); TABS.options.initAnalyticsOptOut(); TABS.options.initCliAutoComplete(); - TABS.options.initAutoConnectConnectionTimeout(); TABS.options.initShowAllSerialDevices(); TABS.options.initShowVirtualMode(); TABS.options.initCordovaForceComputerUI(); @@ -123,18 +122,6 @@ options.initCliAutoComplete = function () { }).change(); }; -options.initAutoConnectConnectionTimeout = function () { - ConfigStorage.get('connectionTimeout', function (result) { - if (result.connectionTimeout) { - $('#connectionTimeoutSelect').val(result.connectionTimeout); - } - $('#connectionTimeoutSelect').on('change', function () { - const value = parseInt($(this).val()); - ConfigStorage.set({'connectionTimeout': value}); - }); - }); -}; - options.initShowAllSerialDevices = function() { const showAllSerialDevicesElement = $('div.showAllSerialDevices input'); ConfigStorage.get('showAllSerialDevices', result => { diff --git a/src/tabs/options.html b/src/tabs/options.html index 8d901cd3..b00548ea 100644 --- a/src/tabs/options.html +++ b/src/tabs/options.html @@ -35,17 +35,6 @@ </div> <span class="freelabel" i18n="cliAutoComplete"></span> </div> - <div class="connectionTimeout margin-bottom"> - <select id="connectionTimeoutSelect"> - <option value="100">100</option> - <option value="500">500</option> - <option value="1000">1000</option> - <option value="1500">1500</option> - <option value="2500">2500</option> - <option value="5000">5000</option> - </select> - <span class="freelabel" i18n="connectionTimeout"></span> - </div> <div class="showAllSerialDevices margin-bottom"> <div> <input type="checkbox" class="toggle" /> |