Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/iNavFlight/inav-configurator.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Spychalski <pspychalski@gmail.com>2022-10-01 13:49:36 +0300
committerGitHub <noreply@github.com>2022-10-01 13:49:36 +0300
commit310a263dd705d2a21ed57ee9815ca96ded5b513a (patch)
tree6ce864bedc28133526abafd1f94eb5016c358588
parenta9402f4c701e21f0dd73b10dc8ec192f8e9ad692 (diff)
parent278dc096a7cabf86c8235d5d356a7f6062098282 (diff)
Merge pull request #1561 from iNavFlight/MrD_Autoselect-target
Implemented target autodetection
-rwxr-xr-x_locales/en/messages.json3
-rw-r--r--js/msp/MSPHelper.js21
-rw-r--r--main.js2
-rw-r--r--src/css/tabs/firmware_flasher.css5
-rwxr-xr-xtabs/firmware_flasher.html5
-rwxr-xr-xtabs/firmware_flasher.js157
6 files changed, 187 insertions, 6 deletions
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 8e6bd6c2..3bfd2856 100755
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -2179,6 +2179,9 @@
"firmwareFlasherOptionLabelSelectFirmwareVersionFor": {
"message": "Choose a Firmware version for"
},
+ "firmwareFlasherButtonAutoSelect": {
+ "message": "Auto-select Target"
+ },
"firmwareFlasherButtonLoadLocal": {
"message": "Load Firmware [Local]"
},
diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js
index 950f1132..01b5789d 100644
--- a/js/msp/MSPHelper.js
+++ b/js/msp/MSPHelper.js
@@ -777,6 +777,18 @@ var mspHelper = (function (gui) {
CONFIG.boardIdentifier = identifier;
CONFIG.boardVersion = data.getUint16(offset, 1);
offset += 2;
+ if (semver.gt(CONFIG.flightControllerVersion, "4.1.0")) {
+ CONFIG.osdUsed = data.getUint8(offset++);
+ CONFIG.commCompatability = data.getUint8(offset++);
+ let targetNameLen = data.getUint8(offset++);
+ let targetName = "";
+ targetNameLen += offset;
+ for (offset = offset; offset < targetNameLen; offset++) {
+ targetName += String.fromCharCode(data.getUint8(offset));
+ }
+ CONFIG.target = targetName;
+ }
+
break;
case MSPCodes.MSP_SET_CHANNEL_FORWARDING:
@@ -3190,6 +3202,15 @@ var mspHelper = (function (gui) {
MSP.send_message(MSPCodes.MSP_MOTOR, false, false, callback);
};
+ self.getTarget = function(callback) {
+ MSP.send_message(MSPCodes.MSP_FC_VERSION, false, false, function(resp){
+ var target = resp.data.readString();
+ if (callback) {
+ callback(target);
+ }
+ });
+ }
+
self.getCraftName = function (callback) {
MSP.send_message(MSPCodes.MSP_NAME, false, false, function (resp) {
var name = resp.data.readString();
diff --git a/main.js b/main.js
index 75a123df..b365b96a 100644
--- a/main.js
+++ b/main.js
@@ -657,7 +657,7 @@ function updateActivatedTab() {
function updateFirmwareVersion() {
if (CONFIGURATOR.connectionValid) {
- $('#logo .firmware_version').text(CONFIG.flightControllerVersion);
+ $('#logo .firmware_version').text(CONFIG.flightControllerVersion + " [" + CONFIG.target + "]");
} else {
$('#logo .firmware_version').text(chrome.i18n.getMessage('fcNotConnected'));
}
diff --git a/src/css/tabs/firmware_flasher.css b/src/css/tabs/firmware_flasher.css
index ec488163..a57bf456 100644
--- a/src/css/tabs/firmware_flasher.css
+++ b/src/css/tabs/firmware_flasher.css
@@ -49,6 +49,11 @@
-webkit-appearance: none;
}
+.tab-firmware_flasher .autoselect_description {
+ margin-left: 10px;
+ line-height: 25px;
+}
+
/*noinspection ALL*/
.tab-firmware_flasher .info .progress::-webkit-progress-bar {
background-color: #4f4f4f;
diff --git a/tabs/firmware_flasher.html b/tabs/firmware_flasher.html
index e0d4a688..1bbaed9b 100755
--- a/tabs/firmware_flasher.html
+++ b/tabs/firmware_flasher.html
@@ -8,7 +8,10 @@
<select name="board" id="board_targets">
<option value="0">Loading ...</option>
</select></td>
- <td><span class="description" i18n="firmwareFlasherOnlineSelectBoardDescription"></span></td>
+ <td><div class="default_btn narrow">
+ <a class="auto_select_target" href="#" i18n="firmwareFlasherButtonAutoSelect"></a>
+ </div>
+ <span class="autoselect_description description" i18n="firmwareFlasherOnlineSelectBoardDescription"></span></td>
</tr>
<tr>
<td><select name="firmware_version">
diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js
index 21529e45..485a6753 100755
--- a/tabs/firmware_flasher.js
+++ b/tabs/firmware_flasher.js
@@ -50,8 +50,17 @@ TABS.firmware_flasher.initialize = function (callback) {
};
}
- $('input.show_development_releases').click(function(){
+ $('input.show_development_releases').click(function() {
+ let selectedTarget = String($('select[name="board"]').val());
+ GUI.log("selected target = " + selectedTarget);
buildBoardOptions();
+ GUI.log("toggled RCs");
+ if (selectedTarget === "0") {
+ TABS.firmware_flasher.getTarget();
+ } else {
+ $('select[name="board"] option[value=' + selectedTarget + ']').attr("selected", "selected");
+ $('select[name="board"]').change();
+ }
});
$('.target_search').on('input', function(){
@@ -74,10 +83,10 @@ TABS.firmware_flasher.initialize = function (callback) {
var buildBoardOptions = function(){
var boards_e = $('select[name="board"]').empty();
+ var versions_e = $('select[name="firmware_version"]').empty();
var showDevReleases = ($('input.show_development_releases').is(':checked'));
+
boards_e.append($("<option value='0'>{0}</option>".format(chrome.i18n.getMessage('firmwareFlasherOptionLabelSelectBoard'))));
-
- var versions_e = $('select[name="firmware_version"]').empty();
versions_e.append($("<option value='0'>{0}</option>".format(chrome.i18n.getMessage('firmwareFlasherOptionLabelSelectFirmwareVersion'))));
var releases = {};
@@ -140,6 +149,7 @@ TABS.firmware_flasher.initialize = function (callback) {
releases[result.target].push(descriptor);
});
});
+
var selectTargets = [];
Object.keys(releases)
.sort()
@@ -158,6 +168,7 @@ TABS.firmware_flasher.initialize = function (callback) {
});
});
TABS.firmware_flasher.releases = releases;
+ return;
};
$.get('https://api.github.com/repos/iNavFlight/inav/releases?per_page=10', function (releasesData){
@@ -198,11 +209,15 @@ TABS.firmware_flasher.initialize = function (callback) {
}
});
+ $('a.auto_select_target').removeClass('disabled');
+ TABS.firmware_flasher.getTarget();
}).fail(function (data){
if (data["responseJSON"]){
GUI.log("<b>GITHUB Query Failed: <code>{0}</code></b>".format(data["responseJSON"].message));
}
- $('select[name="release"]').empty().append('<option value="0">Offline</option>');
+ $('select[name="board"]').empty().append('<option value="0">Offline</option>');
+ $('select[name="firmware_version"]').empty().append('<option value="0">Offline</option>');
+ $('a.auto_select_target').addClass('disabled');
});
$('a.load_file').on('click', function () {
@@ -561,6 +576,10 @@ TABS.firmware_flasher.initialize = function (callback) {
}
});
+ $('a.auto_select_target').click(function () {
+ TABS.firmware_flasher.getTarget();
+ });
+
GUI.content_ready(callback);
});
};
@@ -614,3 +633,133 @@ TABS.firmware_flasher.cleanup = function (callback) {
if (callback) callback();
};
+
+TABS.firmware_flasher.getTarget = function() {
+ GUI.log("Attempting automatic target selection");
+
+ var selected_baud = parseInt($('#baud').val());
+ var selected_port = $('#port').find('option:selected').data().isManual ? $('#port-override').val() : String($('#port').val());
+
+ if (selected_port !== 'DFU') {
+ if (selected_port == '0') {
+ GUI.log("Cannot prefetch target: No port");
+ } else {
+ console.log('Connecting to: ' + selected_port);
+ GUI.connecting_to = selected_port;
+
+ if (selected_port == 'tcp' || selected_port == 'udp') {
+ CONFIGURATOR.connection.connect($portOverride.val(), {}, TABS.firmware_flasher.onOpen);
+ } else {
+ CONFIGURATOR.connection.connect(selected_port, {bitrate: selected_baud}, TABS.firmware_flasher.onOpen);
+ }
+ }
+ } else {
+ GUI.log("Cannot prefetch target: Flight Controller in DFU");
+ }
+};
+
+TABS.firmware_flasher.onOpen = function(openInfo) {
+ if (openInfo) {
+ GUI.connected_to = GUI.connecting_to;
+
+ // reset connecting_to
+ GUI.connecting_to = false;
+
+ // save selected port with chrome.storage if the port differs
+ chrome.storage.local.get('last_used_port', function (result) {
+ if (result.last_used_port) {
+ if (result.last_used_port != GUI.connected_to) {
+ // last used port doesn't match the one found in local db, we will store the new one
+ chrome.storage.local.set({'last_used_port': GUI.connected_to});
+ }
+ } else {
+ // variable isn't stored yet, saving
+ chrome.storage.local.set({'last_used_port': GUI.connected_to});
+ }
+ });
+
+ chrome.storage.local.set({last_used_bps: CONFIGURATOR.connection.bitrate});
+ chrome.storage.local.set({wireless_mode_enabled: $('#wireless-mode').is(":checked")});
+
+ CONFIGURATOR.connection.addOnReceiveListener(read_serial);
+
+ // disconnect after 10 seconds with error if we don't get IDENT data
+ helper.timeout.add('connecting', function () {
+ if (!CONFIGURATOR.connectionValid) {
+ GUI.log("Cannot prefetch target: " + chrome.i18n.getMessage('noConfigurationReceived'));
+
+ TABS.firmware_flasher.closeTempConnection();
+ }
+ }, 10000);
+
+ FC.resetState();
+
+ // request configuration data. Start with MSPv1 and
+ // upgrade to MSPv2 if possible.
+ MSP.protocolVersion = MSP.constants.PROTOCOL_V2;
+ MSP.send_message(MSPCodes.MSP_API_VERSION, false, false, function () {
+
+ if (CONFIG.apiVersion === "0.0.0") {
+ GUI_control.prototype.log("Cannot prefetch target: <span style='color: red; font-weight: bolder'><strong>" + chrome.i18n.getMessage("illegalStateRestartRequired") + "</strong></span>");
+ FC.restartRequired = true;
+ return;
+ }
+
+ MSP.send_message(MSPCodes.MSP_FC_VARIANT, false, false, function () {
+ if (CONFIG.flightControllerIdentifier == 'INAV') {
+ MSP.send_message(MSPCodes.MSP_FC_VERSION, false, false, function () {
+ if (semver.gte(CONFIG.flightControllerVersion, CONFIGURATOR.minfirmwareVersionAccepted) && semver.lt(CONFIG.flightControllerVersion, CONFIGURATOR.maxFirmwareVersionAccepted)) {
+ if (CONFIGURATOR.connection.type == ConnectionType.BLE && semver.lt(CONFIG.flightControllerVersion, "5.0.0")) {
+ onBleNotSupported();
+ } else {
+ mspHelper.getCraftName(function(name) {
+ if (name) {
+ CONFIG.name = name;
+ }
+ TABS.firmware_flasher.onValidFirmware();
+ });
+ }
+ } else {
+ onInvalidFirmwareVersion();
+ }
+ });
+ } else {
+ GUI.log("Cannot prefetch target: Non-INAV Firmware");
+ onInvalidFirmwareVariant();
+ }
+ });
+ });
+ } else {
+ GUI.log("Cannot prefetch target: " + chrome.i18n.getMessage('serialPortOpenFail'));
+ return;
+ }
+};
+
+TABS.firmware_flasher.onValidFirmware = function() {
+ MSP.send_message(MSPCodes.MSP_BUILD_INFO, false, false, function () {
+ MSP.send_message(MSPCodes.MSP_BOARD_INFO, false, false, function () {
+ $('select[name="board"] option[value=' + CONFIG.target + ']').attr("selected", "selected");
+ GUI.log("Target prefetch successful: " + CONFIG.target);
+
+ TABS.firmware_flasher.closeTempConnection();
+ $('select[name="board"]').change();
+ });
+ });
+};
+
+TABS.firmware_flasher.closeTempConnection = function() {
+ helper.timeout.killAll();
+ helper.interval.killAll(['global_data_refresh', 'msp-load-update']);
+ helper.mspBalancedInterval.flush();
+
+ helper.mspQueue.flush();
+ helper.mspQueue.freeHardLock();
+ helper.mspQueue.freeSoftLock();
+ CONFIGURATOR.connection.emptyOutputBuffer();
+
+ CONFIGURATOR.connectionValid = false;
+ GUI.connected_to = false;
+
+ CONFIGURATOR.connection.disconnect(onClosed);
+ MSP.disconnect_cleanup();
+}; \ No newline at end of file