Merge branch 'release_7.1.0' into cli_autocomplete
16
README.md
|
@ -8,23 +8,23 @@ Various types of aircraft are supported by the tool and by INAV, e.g. quadcopter
|
|||
|
||||
# Support
|
||||
|
||||
INAV Configurator comes `as is`, without any warranty and support from authors. If you found a bug, please create an issue on [GitHub](https://github.com/iNavFlight/inav-configurator/issues).
|
||||
INAV Configurator comes `as is`, without any warranty and support from the authors. If you find a bug, please create an issue on [GitHub](https://github.com/iNavFlight/inav-configurator/issues).
|
||||
|
||||
The GitHub issue tracker is reserved for bugs and other technical problems. If you do not know how to setup
|
||||
everything, the hardware is not working or have any other _support_ problem, please consult:
|
||||
The GitHub issue tracker is reserved for bugs and other technical problems. If you do not know how to set up
|
||||
everything, the hardware is not working, or you have any other _support_ problem, please consult:
|
||||
|
||||
* [INAV Discord Server](https://discord.gg/peg2hhbYwN)
|
||||
* [INAV Official on Facebook](https://www.facebook.com/groups/INAVOfficial)
|
||||
* [RC Groups Support](https://www.rcgroups.com/forums/showthread.php?2495732-Cleanflight-iNav-(navigation-rewrite)-project)
|
||||
* [INAV Official on Telegram](https://t.me/INAVFlight)
|
||||
|
||||
## INAV Configurator start minimized, what should I do?
|
||||
## INAV Configurator starts minimized, what should I do?
|
||||
|
||||
You have to remove the `C:\Users%Your_UserName%\AppData\Local\inav-configurator` folder and all its content.
|
||||
|
||||
[https://www.youtube.com/watch?v=XMoULyiFDp4](https://www.youtube.com/watch?v=XMoULyiFDp4)
|
||||
|
||||
Alternatively, on Windows with PowerShell, you can use the `post_install_cleanup.ps1` script that will do the cleaning. (thank you James Cherrill)
|
||||
Alternatively, on Windows with PowerShell, you can use the `post_install_cleanup.ps1` script that will do the cleaning. (thank you, James Cherrill)
|
||||
|
||||
## Installation
|
||||
|
||||
|
@ -114,7 +114,7 @@ in the configurator. If new files are added, they must be included in `gulpfile.
|
|||
in the `./dist/` directory.
|
||||
- **release**: Create NW.js apps for each supported platform (win32, osx64 and linux64) in the `./apps`
|
||||
directory. Running this task on macOS or Linux requires Wine since it's needed to set the icon
|
||||
for the Windows app. If you don't have Wine installed you can create a release by running the **release-only-Linux** task.
|
||||
for the Windows app. If you don't have Wine installed, you can create a release by running the **release-only-Linux** task.
|
||||
<br>`--installer` argument can be added to build installers for a particular OS. NOTE: MacOS Installer can be built with MacOS only.
|
||||
|
||||
To build a specific release, use the command `release --platform="win64"` for example.
|
||||
|
@ -160,7 +160,7 @@ INAV Configurator is shipped **WITHOUT** API key for Bing Maps. That means: ever
|
|||
|
||||
## Font Customisation
|
||||
|
||||
INAV provides the font images so that custom fonts can be created for your personal preference. This is the case for both analogue and digital fonts. The resources can be found in the [osd](/resources/osd) folder. Within the **analogue** and **digital** subfolders, you will find information on compiling your own fonts. There is also an [INAV Character Map](/resources/osd/INAV%20Character%20Map.md) document. This contains previews of all the character images in the fonts, and the appropriate variable names within the firmware and Configurator. There are tools for compiling the [analogue](https://github.com/fiam/max7456tool) and [digital](https://github.com/MrD-RC/hdosd-font-tool) fonts. New font submissions via pull requests are welcome.
|
||||
INAV provides the font images so that custom fonts can be created for your personal preference. This is the case for both analogue and digital fonts. The resources can be found in the [osd](/resources/osd) folder. Within the **analogue** and **digital** subfolders, you will find information on compiling your own fonts. There is also an [INAV Character Map](/resources/osd/INAV%20Character%20Map.md) document. This contains previews of all the character images in the fonts and the appropriate variable names within the firmware and Configurator. There are tools for compiling the [analogue](https://github.com/fiam/max7456tool) and [digital](https://github.com/MrD-RC/hdosd-font-tool) fonts. New font submissions via pull requests are welcome.
|
||||
|
||||
## Notes
|
||||
|
||||
|
@ -174,7 +174,7 @@ For INAV configurator issues raise them here
|
|||
|
||||
https://github.com/iNavFlight/inav-configurator/issues
|
||||
|
||||
For INAV firmware issues raise them here
|
||||
For INAV firmware issues, raise them here
|
||||
|
||||
https://github.com/iNavFlight/inav/issues
|
||||
|
||||
|
|
|
@ -1305,6 +1305,9 @@
|
|||
"portsFunction_MSP_DISPLAYPORT": {
|
||||
"message": "MSP DisplayPort"
|
||||
},
|
||||
"portsFunction_SBUS_OUTPUT": {
|
||||
"message": "SBus Output"
|
||||
},
|
||||
"pidTuning_ShowAllPIDs": {
|
||||
"message": "Show all PIDs"
|
||||
},
|
||||
|
@ -2223,7 +2226,7 @@
|
|||
"message": "Blackbox configuration"
|
||||
},
|
||||
"blackboxButtonSave": {
|
||||
"message": "Save and reboot"
|
||||
"message": "Save and Reboot"
|
||||
},
|
||||
"serialLogging": {
|
||||
"message": "Outboard serial logging device"
|
||||
|
@ -4298,8 +4301,8 @@
|
|||
"missionMultiAddNewMission": {
|
||||
"message": "Add New Mission"
|
||||
},
|
||||
"missionLevelEarthDEMModel": {
|
||||
"message": "Use Sea Level Earth DEM Model: "
|
||||
"missionEllipsoidEarthDEMModel": {
|
||||
"message": "Use Ellipsoid instead of SL DEM: "
|
||||
},
|
||||
"SafehomeLegend": {
|
||||
"message": "Legend : "
|
||||
|
@ -4455,7 +4458,7 @@
|
|||
"message": "Confirm"
|
||||
},
|
||||
"mixerButtonSaveAndReboot": {
|
||||
"message": "Save and reboot"
|
||||
"message": "Save and Reboot"
|
||||
},
|
||||
"mixerApplyDescription": {
|
||||
"message": "This action overrides all current mixer settings and replaces them with default values. There is no 'Undo' option!"
|
||||
|
|
|
@ -57,14 +57,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_hz",
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_type",
|
||||
value: "PT1"
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
|
@ -200,6 +192,11 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -270,14 +267,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_hz",
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_type",
|
||||
value: "PT1"
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
|
@ -413,6 +402,11 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 110
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -461,14 +455,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "dterm_lpf_type",
|
||||
value: "PT3"
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_hz",
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
key: "dterm_lpf2_type",
|
||||
value: "PT1"
|
||||
},
|
||||
{
|
||||
key: "dynamic_gyro_notch_enabled",
|
||||
value: "ON"
|
||||
|
@ -608,6 +594,11 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
key: "failsafe_procedure",
|
||||
value: "DROP"
|
||||
},
|
||||
// Ez Tune
|
||||
{
|
||||
key: "ez_filter_hz",
|
||||
value: 90
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -794,10 +785,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "nav_rth_altitude",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "failsafe_mission",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "nav_wp_radius",
|
||||
value: 5000
|
||||
|
@ -1007,10 +994,6 @@ helper.defaultsDialog = (function () {
|
|||
key: "nav_rth_altitude",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "failsafe_mission",
|
||||
value: "ON"
|
||||
},
|
||||
{
|
||||
key: "nav_wp_radius",
|
||||
value: 5000
|
||||
|
@ -1169,86 +1152,94 @@ helper.defaultsDialog = (function () {
|
|||
privateScope.setSettings = function (selectedDefaultPreset) {
|
||||
var currentControlProfile = parseInt($("#profilechange").val());
|
||||
var currentBatteryProfile = parseInt($("#batteryprofilechange").val());
|
||||
|
||||
var controlProfileSettings = [];
|
||||
var batterySettings = [];
|
||||
var miscSettings = [];
|
||||
|
||||
selectedDefaultPreset.settings.forEach(input => {
|
||||
if (FC.isControlProfileParameter(input.key)) {
|
||||
controlProfileSettings.push(input);
|
||||
} else if (FC.isBatteryProfileParameter(input.key)) {
|
||||
batterySettings.push(input);
|
||||
} else {
|
||||
miscSettings.push(input);
|
||||
}
|
||||
});
|
||||
|
||||
//Save analytics
|
||||
googleAnalytics.sendEvent('Setting', 'Defaults', selectedDefaultPreset.title);
|
||||
Promise.mapSeries(selectedDefaultPreset.settings, function (input, ii) {
|
||||
return mspHelper.getSetting(input.key);
|
||||
}).then(function () {
|
||||
Promise.mapSeries(selectedDefaultPreset.settings, function (input, ii) {
|
||||
if (FC.isControlProfileParameter(input.key)) {
|
||||
return privateScope.setSettingForAllControlProfiles(input.key, input.value);
|
||||
} else if (FC.isBatteryProfileParameter(input.key)) {
|
||||
return privateScope.setSettingForAllBatteryProfiles(input.key, input.value);
|
||||
} else {
|
||||
return mspHelper.setSetting(input.key, input.value);
|
||||
}
|
||||
}).then(function () {
|
||||
|
||||
// If default preset is associated to a mixer, apply the mixer as well
|
||||
if (selectedDefaultPreset.mixerToApply) {
|
||||
let currentMixerPreset = helper.mixer.getById(selectedDefaultPreset.mixerToApply);
|
||||
var settingsChainer = MSPChainerClass();
|
||||
var chain = [];
|
||||
|
||||
helper.mixer.loadServoRules(currentMixerPreset);
|
||||
helper.mixer.loadMotorRules(currentMixerPreset);
|
||||
|
||||
MIXER_CONFIG.platformType = currentMixerPreset.platform;
|
||||
MIXER_CONFIG.appliedMixerPreset = selectedDefaultPreset.mixerToApply;
|
||||
MIXER_CONFIG.motorStopOnLow = (currentMixerPreset.motorStopOnLow === true) ? true : false;
|
||||
MIXER_CONFIG.hasFlaps = (currentMixerPreset.hasFlaps === true) ? true : false;
|
||||
|
||||
SERVO_RULES.cleanup();
|
||||
SERVO_RULES.inflate();
|
||||
MOTOR_RULES.cleanup();
|
||||
MOTOR_RULES.inflate();
|
||||
|
||||
mspHelper.saveMixerConfig(function() {
|
||||
mspHelper.sendServoMixer(function () {
|
||||
mspHelper.sendMotorMixer(function () {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [currentControlProfile], false, function() {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [currentBatteryProfile], false, privateScope.finalize(selectedDefaultPreset));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
} else {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [currentControlProfile], false, function() {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [currentBatteryProfile], false, privateScope.finalize(selectedDefaultPreset));
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
privateScope.setSettingForAllControlProfiles = function (key, value) {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [0], false, function () {
|
||||
mspHelper.setSetting(key, value, function() {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [1], false, function () {
|
||||
mspHelper.setSetting(key, value, function() {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [2], false, function () {
|
||||
mspHelper.setSetting(key, value);
|
||||
});
|
||||
});
|
||||
});
|
||||
miscSettings.forEach(input => {
|
||||
chain.push(function (callback) {
|
||||
mspHelper.setSetting(input.key, input.value, callback);
|
||||
});
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
privateScope.setSettingForAllBatteryProfiles = function (key, value) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [0], false, function () {
|
||||
mspHelper.setSetting(key, value, function() {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [1], false, function () {
|
||||
mspHelper.setSetting(key, value, function() {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [2], false, function () {
|
||||
mspHelper.setSetting(key, value);
|
||||
});
|
||||
});
|
||||
for (var i = 0; i < 3; i++ ) {
|
||||
chain.push(function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [i], false, callback);
|
||||
});
|
||||
controlProfileSettings.forEach(input => {
|
||||
chain.push(function (callback) {
|
||||
mspHelper.setSetting(input.key, input.value, callback);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
for (var i = 0; i < 3; i++ ) {
|
||||
chain.push(function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [i], false, callback);
|
||||
});
|
||||
batterySettings.forEach(input => {
|
||||
chain.push(function (callback) {
|
||||
mspHelper.setSetting(input.key, input.value, callback);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Set Mixers
|
||||
if (selectedDefaultPreset.mixerToApply) {
|
||||
let currentMixerPreset = helper.mixer.getById(selectedDefaultPreset.mixerToApply);
|
||||
|
||||
helper.mixer.loadServoRules(currentMixerPreset);
|
||||
helper.mixer.loadMotorRules(currentMixerPreset);
|
||||
|
||||
MIXER_CONFIG.platformType = currentMixerPreset.platform;
|
||||
MIXER_CONFIG.appliedMixerPreset = selectedDefaultPreset.mixerToApply;
|
||||
MIXER_CONFIG.motorStopOnLow = (currentMixerPreset.motorStopOnLow === true) ? true : false;
|
||||
MIXER_CONFIG.hasFlaps = (currentMixerPreset.hasFlaps === true) ? true : false;
|
||||
|
||||
SERVO_RULES.cleanup();
|
||||
SERVO_RULES.inflate();
|
||||
MOTOR_RULES.cleanup();
|
||||
MOTOR_RULES.inflate();
|
||||
|
||||
chain = chain.concat([
|
||||
mspHelper.saveMixerConfig,
|
||||
mspHelper.sendServoMixer,
|
||||
mspHelper.sendMotorMixer
|
||||
]);
|
||||
}
|
||||
|
||||
chain.push(function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [currentControlProfile], false, callback);
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
chain.push(function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [currentBatteryProfile], false, callback);
|
||||
});
|
||||
|
||||
settingsChainer.setChain(chain);
|
||||
settingsChainer.setExitPoint(function () {
|
||||
privateScope.finalize(selectedDefaultPreset);
|
||||
});
|
||||
|
||||
settingsChainer.execute();
|
||||
}
|
||||
|
||||
privateScope.onPresetClick = function (event) {
|
||||
savingDefaultsModal = new jBox('Modal', {
|
||||
|
|
8
js/fc.js
|
@ -118,9 +118,9 @@ var FC = {
|
|||
i2cError: 0,
|
||||
activeSensors: 0,
|
||||
mode: [],
|
||||
mixer_profile: 0,
|
||||
profile: 0,
|
||||
battery_profile: 0,
|
||||
mixer_profile: -1,
|
||||
profile: -1,
|
||||
battery_profile: -1,
|
||||
uid: [0, 0, 0],
|
||||
accelerometerTrims: [0, 0],
|
||||
armingFlags: 0,
|
||||
|
@ -1439,8 +1439,6 @@ var FC = {
|
|||
'max_angle_inclination_pit',
|
||||
'dterm_lpf_hz',
|
||||
'dterm_lpf_type',
|
||||
'dterm_lpf2_hz',
|
||||
'dterm_lpf2_type',
|
||||
'yaw_lpf_hz',
|
||||
'fw_iterm_throw_limit',
|
||||
'fw_reference_airspeed',
|
||||
|
|
|
@ -260,10 +260,16 @@ GUI_control.prototype.updateStatusBar = function() {
|
|||
$('span.arming-flags').text(activeArmFlags.length ? activeArmFlags.join(', ') : '-');
|
||||
};
|
||||
|
||||
GUI_control.prototype.updateProfileChange = function() {
|
||||
GUI_control.prototype.updateProfileChange = function(refresh) {
|
||||
$('#mixerprofilechange').val(CONFIG.mixer_profile);
|
||||
$('#profilechange').val(CONFIG.profile);
|
||||
$('#batteryprofilechange').val(CONFIG.battery_profile);
|
||||
if (refresh) {
|
||||
GUI.log(chrome.i18n.getMessage('loadedMixerProfile', [CONFIG.mixer_profile + 1]));
|
||||
GUI.log(chrome.i18n.getMessage('pidTuning_LoadedProfile', [CONFIG.profile + 1]));
|
||||
GUI.log(chrome.i18n.getMessage('loadedBatteryProfile', [CONFIG.battery_profile + 1]));
|
||||
updateActivatedTab();
|
||||
}
|
||||
};
|
||||
|
||||
GUI_control.prototype.fillSelect = function ($element, values, currentValue, unit) {
|
||||
|
|
|
@ -42,6 +42,7 @@ var mspHelper = (function (gui) {
|
|||
'GSM_SMS': 19,
|
||||
'FRSKY_OSD': 20,
|
||||
'DJI_FPV': 21,
|
||||
'SBUS_OUTPUT': 22,
|
||||
'SMARTPORT_MASTER': 23,
|
||||
'MSP_DISPLAYPORT': 25,
|
||||
};
|
||||
|
@ -68,6 +69,7 @@ var mspHelper = (function (gui) {
|
|||
color;
|
||||
if (!dataHandler.unsupported || dataHandler.unsupported) switch (dataHandler.code) {
|
||||
case MSPCodes.MSPV2_INAV_STATUS:
|
||||
let profile_changed = false;
|
||||
CONFIG.cycleTime = data.getUint16(offset, true);
|
||||
offset += 2;
|
||||
CONFIG.i2cError = data.getUint16(offset, true);
|
||||
|
@ -76,15 +78,28 @@ var mspHelper = (function (gui) {
|
|||
offset += 2;
|
||||
CONFIG.cpuload = data.getUint16(offset, true);
|
||||
offset += 2;
|
||||
|
||||
profile_byte = data.getUint8(offset++)
|
||||
CONFIG.profile = profile_byte & 0x0F;
|
||||
CONFIG.battery_profile = (profile_byte & 0xF0) >> 4;
|
||||
profile_byte = data.getUint8(offset++)
|
||||
CONFIG.mixer_profile = profile_byte & 0x0F;
|
||||
let profile = profile_byte & 0x0F;
|
||||
profile_changed |= (profile !== CONFIG.profile) && (CONFIG.profile !==-1);
|
||||
CONFIG.profile = profile;
|
||||
|
||||
let battery_profile = (profile_byte & 0xF0) >> 4;
|
||||
profile_changed |= (battery_profile !== CONFIG.battery_profile) && (CONFIG.battery_profile !==-1);
|
||||
CONFIG.battery_profile = battery_profile;
|
||||
|
||||
CONFIG.armingFlags = data.getUint32(offset, true);
|
||||
offset += 4;
|
||||
|
||||
//As there are 8 bytes for mspBoxModeFlags (number of bytes is actually variable)
|
||||
//read mixer profile as the last byte in the the message
|
||||
profile_byte = data.getUint8(dataHandler.message_length_expected - 1);
|
||||
let mixer_profile = profile_byte & 0x0F;
|
||||
profile_changed |= (mixer_profile !== CONFIG.mixer_profile) && (CONFIG.mixer_profile !==-1);
|
||||
CONFIG.mixer_profile = mixer_profile;
|
||||
|
||||
gui.updateStatusBar();
|
||||
gui.updateProfileChange();
|
||||
gui.updateProfileChange(profile_changed);
|
||||
break;
|
||||
|
||||
case MSPCodes.MSP_ACTIVEBOXES:
|
||||
|
@ -1456,7 +1471,7 @@ var mspHelper = (function (gui) {
|
|||
case MSPCodes.MSP2_INAV_MIXER:
|
||||
MIXER_CONFIG.yawMotorDirection = data.getInt8(0);
|
||||
MIXER_CONFIG.yawJumpPreventionLimit = data.getUint8(1, true);
|
||||
MIXER_CONFIG.motorStopOnLow = data.getUint8(1, true);
|
||||
MIXER_CONFIG.motorStopOnLow = data.getUint8(2, true);
|
||||
MIXER_CONFIG.platformType = data.getInt8(3);
|
||||
MIXER_CONFIG.hasFlaps = data.getInt8(4);
|
||||
MIXER_CONFIG.appliedMixerPreset = data.getInt16(5, true);
|
||||
|
@ -1482,6 +1497,9 @@ var mspHelper = (function (gui) {
|
|||
case MSPCodes.MSP2_INAV_OSD_SET_PREFERENCES:
|
||||
console.log('OSD preferences saved');
|
||||
break;
|
||||
case MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE:
|
||||
console.log('Battery profile selected');
|
||||
break;
|
||||
case MSPCodes.MSPV2_INAV_OUTPUT_MAPPING:
|
||||
OUTPUT_MAPPING.flush();
|
||||
for (i = 0; i < data.byteLength; ++i)
|
||||
|
@ -2910,7 +2928,7 @@ var mspHelper = (function (gui) {
|
|||
MSP.send_message(MSPCodes.MSP2_INAV_TIMER_OUTPUT_MODE, false, false, callback);
|
||||
}
|
||||
|
||||
self.sendTimerOutputModes = function(callback) {
|
||||
self.sendTimerOutputModes = function(onCompleteCallback) {
|
||||
var nextFunction = send_next_output_mode;
|
||||
var idIndex = 0;
|
||||
|
||||
|
@ -2935,7 +2953,7 @@ var mspHelper = (function (gui) {
|
|||
// prepare for next iteration
|
||||
idIndex++;
|
||||
if (idIndex == overrideIds.length) {
|
||||
nextFunction = callback;
|
||||
nextFunction = onCompleteCallback;
|
||||
|
||||
}
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SET_TIMER_OUTPUT_MODE, buffer, false, nextFunction);
|
||||
|
@ -3297,6 +3315,12 @@ var mspHelper = (function (gui) {
|
|||
|
||||
self.encodeSetting = function (name, value) {
|
||||
return this._getSetting(name).then(function (setting) {
|
||||
|
||||
if (!setting) {
|
||||
console.log("Setting invalid: " + name);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (setting.table && !Number.isInteger(value)) {
|
||||
var found = false;
|
||||
for (var ii = 0; ii < setting.table.values.length; ii++) {
|
||||
|
@ -3344,7 +3368,11 @@ var mspHelper = (function (gui) {
|
|||
|
||||
self.setSetting = function (name, value, callback) {
|
||||
this.encodeSetting(name, value).then(function (data) {
|
||||
return MSP.promise(MSPCodes.MSPV2_SET_SETTING, data).then(callback);
|
||||
if (data) {
|
||||
return MSP.promise(MSPCodes.MSPV2_SET_SETTING, data).then(callback);
|
||||
} else {
|
||||
return Promise.resolve().then(callback);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -22,7 +22,16 @@ PortHandler.initialize = function () {
|
|||
PortHandler.check = function () {
|
||||
var self = this;
|
||||
|
||||
ConnectionSerial.getDevices(function(current_ports) {
|
||||
ConnectionSerial.getDevices(function(all_ports) {
|
||||
|
||||
// filter out ports that are not serial
|
||||
let current_ports = [];
|
||||
for (var i = 0; i < all_ports.length; i++) {
|
||||
if (all_ports[i].indexOf(':') === -1) {
|
||||
current_ports.push(all_ports[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// port got removed or initial_ports wasn't initialized yet
|
||||
if (self.array_difference(self.initial_ports, current_ports).length > 0 || !self.initial_ports) {
|
||||
var removed_ports = self.array_difference(self.initial_ports, current_ports);
|
||||
|
|
|
@ -257,6 +257,7 @@ function onValidFirmware()
|
|||
|
||||
$('#tabs ul.mode-connected .tab_setup a').click();
|
||||
|
||||
updateEzTuneTabVisibility(true);
|
||||
updateFirmwareVersion();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -139,7 +139,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.getElevation = async function (globalSettings) {
|
||||
let elevation = "N/A";
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
let elevationEarthModel = $('#elevationEarthModel').prop("checked") ? "sealevel" : "ellipsoid";
|
||||
let elevationEarthModel = $('#elevationEarthModel').prop("checked") ? "ellipsoid" : "sealevel";
|
||||
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights='+elevationEarthModel+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
|
|
39
main.js
|
@ -130,10 +130,14 @@ $(document).ready(function () {
|
|||
//Get saved size and position
|
||||
chrome.storage.local.get('windowSize', function (result) {
|
||||
if (result.windowSize) {
|
||||
win.height = result.windowSize.height;
|
||||
win.width = result.windowSize.width;
|
||||
win.x = result.windowSize.x;
|
||||
win.y = result.windowSize.y;
|
||||
if (result.windowSize.height <= window.screen.availHeight)
|
||||
win.height = result.windowSize.height;
|
||||
if (result.windowSize.width <= window.screen.availWidth)
|
||||
win.width = result.windowSize.width;
|
||||
if (result.windowSize.x >= window.screen.availLeft)
|
||||
win.x = result.windowSize.x;
|
||||
if (result.windowSize.y >= window.screen.availTop)
|
||||
win.y = result.windowSize.y;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -585,7 +589,6 @@ $(document).ready(function () {
|
|||
var profile = parseInt($(this).val());
|
||||
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [profile], false, function () {
|
||||
GUI.log(chrome.i18n.getMessage('pidTuning_LoadedProfile', [profile + 1]));
|
||||
updateActivatedTab();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -595,7 +598,6 @@ $(document).ready(function () {
|
|||
var batteryprofile = parseInt($(this).val());
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [batteryprofile], false, function () {
|
||||
GUI.log(chrome.i18n.getMessage('loadedBatteryProfile', [batteryprofile + 1]));
|
||||
updateActivatedTab();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -735,3 +737,28 @@ function updateFirmwareVersion() {
|
|||
globalSettings.docsTreeLocation = 'https://github.com/iNavFlight/inav/blob/master/docs/';
|
||||
}
|
||||
}
|
||||
|
||||
function updateEzTuneTabVisibility(loadMixerConfig) {
|
||||
let useEzTune = true;
|
||||
if (CONFIGURATOR.connectionValid) {
|
||||
if (loadMixerConfig) {
|
||||
mspHelper.loadMixerConfig(function() {
|
||||
if (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER) {
|
||||
$('.tab_ez_tune').removeClass("is-hidden");
|
||||
} else {
|
||||
$('.tab_ez_tune').addClass("is-hidden");
|
||||
useEzTune = false;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER) {
|
||||
$('.tab_ez_tune').removeClass("is-hidden");
|
||||
} else {
|
||||
$('.tab_ez_tune').addClass("is-hidden");
|
||||
useEzTune = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return useEzTune;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"minimum_chrome_version": "38",
|
||||
"version": "7.0.0",
|
||||
"version": "7.1.0",
|
||||
"author": "Several",
|
||||
"name": "INAV - Configurator",
|
||||
"short_name": "INAV",
|
||||
|
|
16874
package-lock.json
generated
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "inav-configurator",
|
||||
"description": "INAV Configurator",
|
||||
"version": "7.0.0",
|
||||
"version": "7.1.0",
|
||||
"main": "main.html",
|
||||
"default_locale": "en",
|
||||
"scripts": {
|
||||
|
@ -37,7 +37,7 @@
|
|||
"jquery-ui-npm": "1.12.0",
|
||||
"marked": "^0.3.17",
|
||||
"minimist": "^1.2.0",
|
||||
"nw": "^0.61.0-sdk",
|
||||
"nw": "^0.81.0",
|
||||
"nw-dialog": "^1.0.7",
|
||||
"openlayers": "^4.6.5",
|
||||
"plotly": "^1.0.6",
|
||||
|
|
|
@ -1,44 +1,121 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Public domain (CC-BY-SA if you or your laws insist), generated by Jonathan Hudson's svg_model_motors.rb -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200pt" height="200pt" viewBox="0 0 200 200" version="1.1">
|
||||
<defs>
|
||||
<g>
|
||||
<symbol overflow="visible" id="glyph0-0">
|
||||
<path style="stroke:none;" d=""/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-1">
|
||||
<path style="stroke:none;" d="M 2.679688 -13.863281 L 2.679688 -15.75 C 4.457031 -15.921875 5.695312 -16.210938 6.398438 -16.617188 C 7.101562 -17.023438 7.625 -17.984375 7.96875 -19.496094 L 9.914062 -19.496094 L 9.914062 0 L 7.289062 0 L 7.289062 -13.863281 Z M 2.679688 -13.863281 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-2">
|
||||
<path style="stroke:none;" d="M 1.921875 -4.402344 C 2.527344 -5.652344 3.710938 -6.785156 5.46875 -7.804688 L 8.09375 -9.324219 C 9.269531 -10.007812 10.09375 -10.589844 10.570312 -11.074219 C 11.316406 -11.832031 11.6875 -12.695312 11.6875 -13.671875 C 11.6875 -14.8125 11.347656 -15.714844 10.664062 -16.386719 C 9.980469 -17.054688 9.070312 -17.390625 7.929688 -17.390625 C 6.242188 -17.390625 5.078125 -16.753906 4.429688 -15.476562 C 4.082031 -14.792969 3.890625 -13.84375 3.855469 -12.632812 L 1.351562 -12.632812 C 1.378906 -14.335938 1.695312 -15.726562 2.296875 -16.804688 C 3.363281 -18.699219 5.246094 -19.648438 7.945312 -19.648438 C 10.1875 -19.648438 11.824219 -19.039062 12.859375 -17.828125 C 13.894531 -16.617188 14.410156 -15.265625 14.410156 -13.78125 C 14.410156 -12.214844 13.859375 -10.875 12.757812 -9.761719 C 12.117188 -9.113281 10.972656 -8.332031 9.324219 -7.410156 L 7.453125 -6.371094 C 6.558594 -5.878906 5.855469 -5.410156 5.34375 -4.960938 C 4.433594 -4.167969 3.859375 -3.289062 3.625 -2.324219 L 14.3125 -2.324219 L 14.3125 0 L 0.875 0 C 0.964844 -1.6875 1.316406 -3.152344 1.921875 -4.402344 Z M 1.921875 -4.402344 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-3">
|
||||
<path style="stroke:none;" d="M 2.234375 -1.375 C 1.191406 -2.644531 0.671875 -4.191406 0.671875 -6.015625 L 3.242188 -6.015625 C 3.351562 -4.75 3.585938 -3.828125 3.953125 -3.253906 C 4.589844 -2.222656 5.742188 -1.710938 7.410156 -1.710938 C 8.703125 -1.710938 9.742188 -2.054688 10.527344 -2.75 C 11.3125 -3.441406 11.703125 -4.335938 11.703125 -5.429688 C 11.703125 -6.777344 11.289062 -7.71875 10.464844 -8.257812 C 9.640625 -8.796875 8.496094 -9.0625 7.027344 -9.0625 C 6.863281 -9.0625 6.695312 -9.0625 6.527344 -9.058594 C 6.359375 -9.054688 6.1875 -9.046875 6.015625 -9.039062 L 6.015625 -11.210938 C 6.269531 -11.183594 6.484375 -11.164062 6.65625 -11.15625 C 6.832031 -11.148438 7.019531 -11.140625 7.21875 -11.140625 C 8.140625 -11.140625 8.894531 -11.289062 9.488281 -11.578125 C 10.527344 -12.089844 11.046875 -13 11.046875 -14.3125 C 11.046875 -15.289062 10.699219 -16.042969 10.007812 -16.570312 C 9.316406 -17.097656 8.507812 -17.363281 7.585938 -17.363281 C 5.945312 -17.363281 4.8125 -16.816406 4.183594 -15.722656 C 3.835938 -15.121094 3.640625 -14.265625 3.59375 -13.152344 L 1.164062 -13.152344 C 1.164062 -14.609375 1.453125 -15.851562 2.039062 -16.871094 C 3.039062 -18.695312 4.804688 -19.605469 7.328125 -19.605469 C 9.324219 -19.605469 10.867188 -19.160156 11.960938 -18.273438 C 13.054688 -17.382812 13.601562 -16.097656 13.601562 -14.410156 C 13.601562 -13.207031 13.28125 -12.230469 12.632812 -11.484375 C 12.230469 -11.019531 11.710938 -10.65625 11.074219 -10.390625 C 12.105469 -10.109375 12.910156 -9.5625 13.488281 -8.757812 C 14.066406 -7.949219 14.355469 -6.964844 14.355469 -5.796875 C 14.355469 -3.929688 13.742188 -2.40625 12.507812 -1.230469 C 11.277344 -0.0546875 9.535156 0.53125 7.273438 0.53125 C 4.957031 0.53125 3.277344 -0.101562 2.234375 -1.375 Z M 2.234375 -1.375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-4">
|
||||
<path style="stroke:none;" d="M 9.257812 -6.929688 L 9.257812 -15.804688 L 2.980469 -6.929688 Z M 9.296875 0 L 9.296875 -4.785156 L 0.710938 -4.785156 L 0.710938 -7.191406 L 9.679688 -19.632812 L 11.757812 -19.632812 L 11.757812 -6.929688 L 14.640625 -6.929688 L 14.640625 -4.785156 L 11.757812 -4.785156 L 11.757812 0 Z M 9.296875 0 "/>
|
||||
</symbol>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface11">
|
||||
<path style="fill:none;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(72.941176%,72.941176%,72.941176%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40 40 L 160 160 M 40 160 L 160 40 "/>
|
||||
<path style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;" d="M 188 160 C 188 175.464844 175.464844 188 160 188 C 144.535156 188 132 175.464844 132 160 C 132 144.535156 144.535156 132 160 132 C 175.464844 132 188 144.535156 188 160 M 179.800781 179.800781 L 177.785156 163 M 179.800781 179.800781 L 196.601562 179.800781 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="153" y="167"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;" d="M 188 40 C 188 55.464844 175.464844 68 160 68 C 144.535156 68 132 55.464844 132 40 C 132 24.535156 144.535156 12 160 12 C 175.464844 12 188 24.535156 188 40 M 179.800781 20.199219 L 177.785156 37 M 179.800781 20.199219 L 196.601562 20.199219 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-2" x="153" y="47"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;" d="M 68 160 C 68 175.464844 55.464844 188 40 188 C 24.535156 188 12 175.464844 12 160 C 12 144.535156 24.535156 132 40 132 C 55.464844 132 68 144.535156 68 160 M 20.199219 179.800781 L 22.214844 163 M 20.199219 179.800781 L 3.398438 179.800781 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-3" x="33" y="167"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;" d="M 68 40 C 68 55.464844 55.464844 68 40 68 C 24.535156 68 12 55.464844 12 40 C 12 24.535156 24.535156 12 40 12 C 55.464844 12 68 24.535156 68 40 M 20.199219 20.199219 L 22.214844 37 M 20.199219 20.199219 L 3.398438 20.199219 "/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-4" x="33" y="47"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:12;stroke-linecap:butt;stroke-linejoin:bevel;stroke:rgb(98.039216%,2.745098%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 100 80 L 100 120 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.039216%,2.745098%,0%);fill-opacity:1;" d="M 100 75 L 85 90 L 115 90 L 100 75 "/>
|
||||
</g>
|
||||
|
||||
<svg
|
||||
width="200pt"
|
||||
height="200pt"
|
||||
viewBox="0 0 200 200"
|
||||
version="1.1"
|
||||
id="svg52"
|
||||
sodipodi:docname="quad_x.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview54"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:document-units="pt"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.165"
|
||||
inkscape:cx="133.17536"
|
||||
inkscape:cy="133.49131"
|
||||
inkscape:window-width="1850"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="1990"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g45" />
|
||||
<defs
|
||||
id="defs19">
|
||||
<g
|
||||
id="g17">
|
||||
<symbol
|
||||
overflow="visible"
|
||||
id="glyph0-0">
|
||||
<path
|
||||
style="stroke:none;"
|
||||
d=""
|
||||
id="path2" />
|
||||
</symbol>
|
||||
<symbol
|
||||
overflow="visible"
|
||||
id="glyph0-1">
|
||||
<path
|
||||
style="stroke:none;"
|
||||
d="M 2.679688 -13.863281 L 2.679688 -15.75 C 4.457031 -15.921875 5.695312 -16.210938 6.398438 -16.617188 C 7.101562 -17.023438 7.625 -17.984375 7.96875 -19.496094 L 9.914062 -19.496094 L 9.914062 0 L 7.289062 0 L 7.289062 -13.863281 Z M 2.679688 -13.863281 "
|
||||
id="path5" />
|
||||
</symbol>
|
||||
<symbol
|
||||
overflow="visible"
|
||||
id="glyph0-2">
|
||||
<path
|
||||
style="stroke:none;"
|
||||
d="M 1.921875 -4.402344 C 2.527344 -5.652344 3.710938 -6.785156 5.46875 -7.804688 L 8.09375 -9.324219 C 9.269531 -10.007812 10.09375 -10.589844 10.570312 -11.074219 C 11.316406 -11.832031 11.6875 -12.695312 11.6875 -13.671875 C 11.6875 -14.8125 11.347656 -15.714844 10.664062 -16.386719 C 9.980469 -17.054688 9.070312 -17.390625 7.929688 -17.390625 C 6.242188 -17.390625 5.078125 -16.753906 4.429688 -15.476562 C 4.082031 -14.792969 3.890625 -13.84375 3.855469 -12.632812 L 1.351562 -12.632812 C 1.378906 -14.335938 1.695312 -15.726562 2.296875 -16.804688 C 3.363281 -18.699219 5.246094 -19.648438 7.945312 -19.648438 C 10.1875 -19.648438 11.824219 -19.039062 12.859375 -17.828125 C 13.894531 -16.617188 14.410156 -15.265625 14.410156 -13.78125 C 14.410156 -12.214844 13.859375 -10.875 12.757812 -9.761719 C 12.117188 -9.113281 10.972656 -8.332031 9.324219 -7.410156 L 7.453125 -6.371094 C 6.558594 -5.878906 5.855469 -5.410156 5.34375 -4.960938 C 4.433594 -4.167969 3.859375 -3.289062 3.625 -2.324219 L 14.3125 -2.324219 L 14.3125 0 L 0.875 0 C 0.964844 -1.6875 1.316406 -3.152344 1.921875 -4.402344 Z M 1.921875 -4.402344 "
|
||||
id="path8" />
|
||||
</symbol>
|
||||
<symbol
|
||||
overflow="visible"
|
||||
id="glyph0-3">
|
||||
<path
|
||||
style="stroke:none;"
|
||||
d="M 2.234375 -1.375 C 1.191406 -2.644531 0.671875 -4.191406 0.671875 -6.015625 L 3.242188 -6.015625 C 3.351562 -4.75 3.585938 -3.828125 3.953125 -3.253906 C 4.589844 -2.222656 5.742188 -1.710938 7.410156 -1.710938 C 8.703125 -1.710938 9.742188 -2.054688 10.527344 -2.75 C 11.3125 -3.441406 11.703125 -4.335938 11.703125 -5.429688 C 11.703125 -6.777344 11.289062 -7.71875 10.464844 -8.257812 C 9.640625 -8.796875 8.496094 -9.0625 7.027344 -9.0625 C 6.863281 -9.0625 6.695312 -9.0625 6.527344 -9.058594 C 6.359375 -9.054688 6.1875 -9.046875 6.015625 -9.039062 L 6.015625 -11.210938 C 6.269531 -11.183594 6.484375 -11.164062 6.65625 -11.15625 C 6.832031 -11.148438 7.019531 -11.140625 7.21875 -11.140625 C 8.140625 -11.140625 8.894531 -11.289062 9.488281 -11.578125 C 10.527344 -12.089844 11.046875 -13 11.046875 -14.3125 C 11.046875 -15.289062 10.699219 -16.042969 10.007812 -16.570312 C 9.316406 -17.097656 8.507812 -17.363281 7.585938 -17.363281 C 5.945312 -17.363281 4.8125 -16.816406 4.183594 -15.722656 C 3.835938 -15.121094 3.640625 -14.265625 3.59375 -13.152344 L 1.164062 -13.152344 C 1.164062 -14.609375 1.453125 -15.851562 2.039062 -16.871094 C 3.039062 -18.695312 4.804688 -19.605469 7.328125 -19.605469 C 9.324219 -19.605469 10.867188 -19.160156 11.960938 -18.273438 C 13.054688 -17.382812 13.601562 -16.097656 13.601562 -14.410156 C 13.601562 -13.207031 13.28125 -12.230469 12.632812 -11.484375 C 12.230469 -11.019531 11.710938 -10.65625 11.074219 -10.390625 C 12.105469 -10.109375 12.910156 -9.5625 13.488281 -8.757812 C 14.066406 -7.949219 14.355469 -6.964844 14.355469 -5.796875 C 14.355469 -3.929688 13.742188 -2.40625 12.507812 -1.230469 C 11.277344 -0.0546875 9.535156 0.53125 7.273438 0.53125 C 4.957031 0.53125 3.277344 -0.101562 2.234375 -1.375 Z M 2.234375 -1.375 "
|
||||
id="path11" />
|
||||
</symbol>
|
||||
<symbol
|
||||
overflow="visible"
|
||||
id="glyph0-4">
|
||||
<path
|
||||
style="stroke:none;"
|
||||
d="M 9.257812 -6.929688 L 9.257812 -15.804688 L 2.980469 -6.929688 Z M 9.296875 0 L 9.296875 -4.785156 L 0.710938 -4.785156 L 0.710938 -7.191406 L 9.679688 -19.632812 L 11.757812 -19.632812 L 11.757812 -6.929688 L 14.640625 -6.929688 L 14.640625 -4.785156 L 11.757812 -4.785156 L 11.757812 0 Z M 9.296875 0 "
|
||||
id="path14" />
|
||||
</symbol>
|
||||
</g>
|
||||
</defs>
|
||||
<g
|
||||
id="surface11">
|
||||
<path
|
||||
style="fill:none;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(72.941176%,72.941176%,72.941176%);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 40 40 L 160 160 M 40 160 L 160 40 "
|
||||
id="path21" />
|
||||
<path
|
||||
style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 188 160 C 188 175.464844 175.464844 188 160 188 C 144.535156 188 132 175.464844 132 160 C 132 144.535156 144.535156 132 160 132 C 175.464844 132 188 144.535156 188 160 M 179.800781 179.800781 L 177.785156 163 M 179.800781 179.800781 L 196.601562 179.800781 "
|
||||
id="path23" />
|
||||
<g
|
||||
style="fill:rgb(0%,0%,0%);fill-opacity:1;"
|
||||
id="g27" />
|
||||
<path
|
||||
style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 188 40 C 188 55.464844 175.464844 68 160 68 C 144.535156 68 132 55.464844 132 40 C 132 24.535156 144.535156 12 160 12 C 175.464844 12 188 24.535156 188 40 M 179.800781 20.199219 L 177.785156 37 M 179.800781 20.199219 L 196.601562 20.199219 "
|
||||
id="path29" />
|
||||
<g
|
||||
style="fill:rgb(0%,0%,0%);fill-opacity:1;"
|
||||
id="g33" />
|
||||
<path
|
||||
style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 68 160 C 68 175.464844 55.464844 188 40 188 C 24.535156 188 12 175.464844 12 160 C 12 144.535156 24.535156 132 40 132 C 55.464844 132 68 144.535156 68 160 M 20.199219 179.800781 L 22.214844 163 M 20.199219 179.800781 L 3.398438 179.800781 "
|
||||
id="path35" />
|
||||
<path
|
||||
style="fill:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(55,168,219);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 68 40 C 68 55.464844 55.464844 68 40 68 C 24.535156 68 12 55.464844 12 40 C 12 24.535156 24.535156 12 40 12 C 55.464844 12 68 24.535156 68 40 M 20.199219 20.199219 L 22.214844 37 M 20.199219 20.199219 L 3.398438 20.199219 "
|
||||
id="path41" />
|
||||
<g
|
||||
style="fill:rgb(0%,0%,0%);fill-opacity:1;"
|
||||
id="g45" />
|
||||
<path
|
||||
style="fill:none;stroke-width:12;stroke-linecap:butt;stroke-linejoin:bevel;stroke:rgb(98.039216%,2.745098%,0%);stroke-opacity:1;stroke-miterlimit:10;"
|
||||
d="M 100 80 L 100 120 "
|
||||
id="path47" />
|
||||
<path
|
||||
style=" stroke:none;fill-rule:nonzero;fill:rgb(98.039216%,2.745098%,0%);fill-opacity:1;"
|
||||
d="M 100 75 L 85 90 L 115 90 L 100 75 "
|
||||
id="path49" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 7.9 KiB |
|
@ -8,10 +8,9 @@
|
|||
version="1.1"
|
||||
id="svg52"
|
||||
sodipodi:docname="quad_x_reverse.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
|
@ -25,14 +24,14 @@
|
|||
inkscape:document-units="pt"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.1269514"
|
||||
inkscape:cx="-5.3240981"
|
||||
inkscape:cy="231.15459"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:cx="-4.8804234"
|
||||
inkscape:cy="231.1546"
|
||||
inkscape:window-width="1850"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="1990"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg52" />
|
||||
inkscape:current-layer="g862" />
|
||||
<defs
|
||||
id="defs19">
|
||||
<g
|
||||
|
@ -89,62 +88,18 @@
|
|||
style="fill:none;stroke:#37a8db;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
|
||||
d="m 188,160 c 0,-15.46484 -12.53516,-28 -28,-28 -15.46484,0 -28,12.53516 -28,28 0,15.46484 12.53516,28 28,28 15.46484,0 28,-12.53516 28,-28 M 179.80078,140.19922 177.78516,157 m 2.01562,-16.80078 h 16.80078"
|
||||
id="path23" />
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g27">
|
||||
<use
|
||||
xlink:href="#glyph0-1"
|
||||
x="153"
|
||||
y="167"
|
||||
id="use25"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#37a8db;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
|
||||
d="m 188,40 c 0,-15.464844 -12.53516,-28 -28,-28 -15.46484,0 -28,12.535156 -28,28 0,15.464844 12.53516,28 28,28 15.46484,0 28,-12.535156 28,-28 M 179.80078,59.800781 177.78516,43 m 2.01562,16.800781 h 16.80078"
|
||||
id="path29" />
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g33">
|
||||
<use
|
||||
xlink:href="#glyph0-2"
|
||||
x="153"
|
||||
y="47"
|
||||
id="use31"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#37a8db;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
|
||||
d="m 68,160 c 0,-15.46484 -12.535156,-28 -28,-28 -15.464844,0 -28,12.53516 -28,28 0,15.46484 12.535156,28 28,28 15.464844,0 28,-12.53516 28,-28 M 20.199219,140.19922 22.214844,157 M 20.199219,140.19922 H 3.398438"
|
||||
id="path35" />
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g39">
|
||||
<use
|
||||
xlink:href="#glyph0-3"
|
||||
x="33"
|
||||
y="167"
|
||||
id="use37"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#37a8db;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
|
||||
d="M 68,40 C 68,24.535156 55.464844,12 40,12 24.535156,12 12,24.535156 12,40 12,55.464844 24.535156,68 40,68 55.464844,68 68,55.464844 68,40 M 20.199219,59.800781 22.214844,43 M 20.199219,59.800781 H 3.398438"
|
||||
id="path41" />
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g45">
|
||||
<use
|
||||
xlink:href="#glyph0-4"
|
||||
x="33"
|
||||
y="47"
|
||||
id="use43"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#fa0500;stroke-width:12;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:10;stroke-opacity:1"
|
||||
d="m 100,80 v 40"
|
||||
|
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 7.5 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 252 B |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -16068,34 +16068,37 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
01010101
|
||||
01010101
|
||||
01010010
|
||||
00010101
|
||||
01010101
|
||||
01001010
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
00101010
|
||||
01010010
|
||||
10100001
|
||||
01010101
|
||||
01000010
|
||||
00000101
|
||||
01001010
|
||||
10101000
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01010100
|
||||
10000101
|
||||
01010101
|
||||
01010000
|
||||
10000001
|
||||
01010101
|
||||
01001010
|
||||
10101000
|
||||
01010100
|
||||
01010010
|
||||
00010101
|
||||
10100001
|
||||
01010010
|
||||
00010010
|
||||
00010101
|
||||
00010100
|
||||
10000101
|
||||
01010010
|
||||
10000100
|
||||
01010101
|
||||
10000101
|
||||
00010101
|
||||
01001010
|
||||
10000101
|
||||
01000101
|
||||
|
@ -16130,9 +16133,6 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010100
|
||||
00010000
|
||||
00010101
|
||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -119,3 +119,13 @@
|
|||
line-height: 27px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
|
||||
.motorNumber {
|
||||
position: absolute;
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
.mixer-preview-image-numbers {
|
||||
width: fit-content;
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="point" id="elevationEarthModelclass" style="display: none">
|
||||
<label class="spacer_box_title" for="elevationEarthModel" data-i18n="missionLevelEarthDEMModel"></label>
|
||||
<label class="spacer_box_title" for="elevationEarthModel" data-i18n="missionEllipsoidEarthDEMModel"></label>
|
||||
<input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -364,24 +364,15 @@ TABS.mission_control.initialize = function (callback) {
|
|||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// define & init parameters for default Settings
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
var vMaxDistSH = 0;
|
||||
var settings = {};
|
||||
var settings = {speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : 0, bingDemModel : false};
|
||||
|
||||
if (CONFIGURATOR.connectionValid) {
|
||||
mspHelper.getSetting("safehome_max_distance").then(function (s) {
|
||||
if (s) {
|
||||
vMaxDistSH = Number(s.value)/100;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
}
|
||||
else {
|
||||
vMaxDistSH = 0;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
settings.maxDistSH = Number(s.value)/100;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
vMaxDistSH = 0;
|
||||
settings = { speed: 0, alt: 5000, safeRadiusSH : 50, maxDistSH : vMaxDistSH};
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// define & init Waypoints parameters
|
||||
|
@ -679,6 +670,7 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationEarthModelclass').fadeIn(300);
|
||||
changeSwitchery($('#elevationEarthModel'), settings.bingDemModel);
|
||||
} else {
|
||||
$('#elevationEarthModelclass').fadeOut(300);
|
||||
}
|
||||
|
@ -2124,18 +2116,26 @@ TABS.mission_control.initialize = function (callback) {
|
|||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
var altitude = Number($('#pointAlt').val());
|
||||
|
||||
if (P3Value != selectedMarker.getP3()) {
|
||||
selectedMarker.setP3(P3Value);
|
||||
|
||||
let groundClearance = 100 * Number($('#groundClearanceValueAtWP').text());
|
||||
if (isNaN(groundClearance)) {
|
||||
groundClearance = settings.alt; // use default altitude if no current ground clearance
|
||||
}
|
||||
|
||||
if ($('#pointP3Alt').prop("checked")) {
|
||||
if (altitude < 0) {
|
||||
altitude = settings.alt;
|
||||
}
|
||||
selectedMarker.setAlt(altitude + elevationAtWP * 100);
|
||||
selectedMarker.setAlt(groundClearance + elevationAtWP * 100);
|
||||
} else {
|
||||
selectedMarker.setAlt(altitude - Number(elevationAtWP) * 100);
|
||||
let elevationAtHome = HOME.getAlt();
|
||||
if (isNaN(elevationAtHome)) {
|
||||
elevationAtHome = elevationAtWP;
|
||||
}
|
||||
selectedMarker.setAlt(groundClearance + 100 * (elevationAtWP - elevationAtHome));
|
||||
}
|
||||
}
|
||||
|
||||
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
|
@ -2318,6 +2318,9 @@ TABS.mission_control.initialize = function (callback) {
|
|||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
|
||||
settings.bingDemModel = $('#elevationEarthModel').prop("checked") ? true : false;
|
||||
saveSettings();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -2469,13 +2472,19 @@ TABS.mission_control.initialize = function (callback) {
|
|||
/////////////////////////////////////////////
|
||||
$('#saveSettings').on('click', function () {
|
||||
let oldSafeRadiusSH = settings.safeRadiusSH;
|
||||
settings = { speed: Number($('#MPdefaultPointSpeed').val()), alt: Number($('#MPdefaultPointAlt').val()), safeRadiusSH: Number($('#MPdefaultSafeRangeSH').val()), maxDistSH : vMaxDistSH};
|
||||
|
||||
settings.speed = Number($('#MPdefaultPointSpeed').val());
|
||||
settings.alt = Number($('#MPdefaultPointAlt').val());
|
||||
settings.safeRadiusSH = Number($('#MPdefaultSafeRangeSH').val());
|
||||
|
||||
saveSettings();
|
||||
|
||||
if (settings.safeRadiusSH != oldSafeRadiusSH && $('#showHideSafehomeButton').is(":visible")) {
|
||||
cleanSafehomeLayers();
|
||||
renderSafehomesOnMap();
|
||||
$('#SafeHomeSafeDistance').text(settings.safeRadiusSH);
|
||||
}
|
||||
|
||||
closeSettingsPanel();
|
||||
});
|
||||
|
||||
|
@ -2833,7 +2842,11 @@ TABS.mission_control.initialize = function (callback) {
|
|||
alert(chrome.i18n.getMessage('MissionPlannerAltitudeChangeReset'));
|
||||
altitude = selectedMarker.getAlt();
|
||||
} else {
|
||||
altitude = settings.alt + 100 * (elevation - elevationAtHome);
|
||||
let currentGroundClearance = 100 * Number($('#groundClearanceValueAtWP').text());
|
||||
if (isNaN(currentGroundClearance) || selectedMarker == null) {
|
||||
currentGroundClearance = settings.alt; // use default altitude if no current ground clearance
|
||||
}
|
||||
altitude = currentGroundClearance + 100 * (elevation - elevationAtHome);
|
||||
}
|
||||
}
|
||||
groundClearance = altitude / 100 + (elevationAtHome - elevation);
|
||||
|
|
|
@ -44,7 +44,11 @@
|
|||
<div class="spacer_box">
|
||||
<div class="select position-relative">
|
||||
<div class="mixerPreview" style="max-width: 175px">
|
||||
<img src="./resources/motor_order/custom.svg" />
|
||||
<img src="./resources/motor_order/custom.svg" id="motor-mixer-preview-img"/>
|
||||
<div class="motorNumber" id="motorNumber1">1</div>
|
||||
<div class="motorNumber" id="motorNumber2">2</div>
|
||||
<div class="motorNumber" id="motorNumber3">3</div>
|
||||
<div class="motorNumber" id="motorNumber4">4</div>
|
||||
</div>
|
||||
<div class="half" style="width: calc(50% - 10px); margin-left: 10px;">
|
||||
<select id="mixer-preset"></select>
|
||||
|
|
|
@ -29,7 +29,8 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
|
|||
mspHelper.loadMotorMixRules,
|
||||
mspHelper.loadOutputMappingExt,
|
||||
mspHelper.loadTimerOutputModes,
|
||||
mspHelper.loadLogicConditions
|
||||
mspHelper.loadLogicConditions,
|
||||
mspHelper.loadEzTune,
|
||||
]);
|
||||
loadChainer.setExitPoint(loadHtml);
|
||||
loadChainer.execute();
|
||||
|
@ -420,6 +421,45 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
|
|||
return (parseInt(weight) + 100) * 1000 / 200 + 1000;
|
||||
}
|
||||
|
||||
|
||||
function labelMotorNumbers() {
|
||||
|
||||
let index = 0;
|
||||
var rules
|
||||
|
||||
if (currentMixerPreset.id == loadedMixerPresetID) {
|
||||
rules = MOTOR_RULES.get();
|
||||
} else {
|
||||
rules = currentMixerPreset.motorMixer;
|
||||
}
|
||||
|
||||
for (const i in rules) {
|
||||
if (rules.hasOwnProperty(i)) {
|
||||
const rule = rules[i];
|
||||
index++;
|
||||
|
||||
if (currentMixerPreset.image != 'quad_x') {
|
||||
$("#motorNumber"+index).css("visibility", "hidden");
|
||||
continue;
|
||||
}
|
||||
|
||||
let top_px = 30;
|
||||
let left_px = 28;
|
||||
if (rule.getRoll() < -0.5) {
|
||||
left_px = $("#motor-mixer-preview-img").width() - 42;
|
||||
}
|
||||
|
||||
if (rule.getPitch() > 0.5) {
|
||||
top_px = $("#motor-mixer-preview-img").height() - 42;
|
||||
}
|
||||
$("#motorNumber"+index).css("left", left_px + "px");
|
||||
$("#motorNumber"+index).css("top", top_px + "px");
|
||||
$("#motorNumber"+index).css("visibility", "visible");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function renderMotorMixRules() {
|
||||
|
||||
/*
|
||||
|
@ -483,6 +523,7 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
|
||||
}
|
||||
labelMotorNumbers();
|
||||
localize();
|
||||
}
|
||||
|
||||
|
@ -668,8 +709,13 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
|
|||
$('#platform-type').parent('.select').addClass('no-bottom-border');
|
||||
}
|
||||
|
||||
updateRefreshButtonStatus();
|
||||
if (!updateEzTuneTabVisibility(false)) {
|
||||
EZ_TUNE.enabled = 0;
|
||||
mspHelper.saveEzTune();
|
||||
}
|
||||
|
||||
updateRefreshButtonStatus();
|
||||
labelMotorNumbers();
|
||||
updateMotorDirection();
|
||||
});
|
||||
|
||||
|
|
|
@ -114,6 +114,12 @@ TABS.ports.initialize = function (callback) {
|
|||
maxPorts: 1,
|
||||
defaultBaud: 57600 }
|
||||
);
|
||||
portFunctionRules.push({
|
||||
name: 'SBUS_OUTPUT',
|
||||
groups: ['peripherals'],
|
||||
maxPorts: 1,
|
||||
defaultBaud: 115200 }
|
||||
);
|
||||
|
||||
for (var i = 0; i < portFunctionRules.length; i++) {
|
||||
portFunctionRules[i].displayName = chrome.i18n.getMessage('portsFunction_' + portFunctionRules[i].name);
|
||||
|
|
|
@ -69,7 +69,10 @@ TABS.setup.initialize = function (callback) {
|
|||
GUI.log(chrome.i18n.getMessage('initialSetupSettingsRestored'));
|
||||
|
||||
GUI.tab_switch_cleanup(function () {
|
||||
TABS.setup.initialize();
|
||||
MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, function() {
|
||||
GUI.log(chrome.i18n.getMessage('deviceRebooting'));
|
||||
GUI.handleReconnect();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|