1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-24 16:55:24 +03:00

Merge pull request #2838 from haslinghuis/dynamic_timeout

Make serial connection timeout dynamic
This commit is contained in:
Asizon 2022-03-02 09:26:30 +01:00 committed by GitHub
commit 5b1845ff74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 46 deletions

View file

@ -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

View file

@ -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');
let attempts = 0;
const reconnect = setInterval(waitforSerial, 100);
if (result.connectionTimeout) {
connectionTimeout = result.connectionTimeout;
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);
}

View file

@ -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 => {

View file

@ -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" />