Merge branch 'master' into MrD_Changes-for-PR-8401
|
@ -1166,8 +1166,8 @@
|
|||
"portsFunction_DJI_FPV": {
|
||||
"message": "DJI FPV VTX"
|
||||
},
|
||||
"portsFunction_HDZERO_VTX": {
|
||||
"message": "HDZero VTX"
|
||||
"portsFunction_MSP_DISPLAYPORT": {
|
||||
"message": "MSP Displayport"
|
||||
},
|
||||
"portsFunction_IMU2": {
|
||||
"message": "Secondary IMU"
|
||||
|
@ -1745,6 +1745,9 @@
|
|||
"adjustmentsFunction58": {
|
||||
"message": "Fixed Wing Level Trim"
|
||||
},
|
||||
"adjustmentsFunction59": {
|
||||
"message": "Multi Mission Index Adjustment"
|
||||
},
|
||||
"adjustmentsSave": {
|
||||
"message": "Save"
|
||||
},
|
||||
|
@ -2176,6 +2179,9 @@
|
|||
"firmwareFlasherOptionLabelSelectFirmwareVersionFor": {
|
||||
"message": "Choose a Firmware version for"
|
||||
},
|
||||
"firmwareFlasherButtonAutoSelect": {
|
||||
"message": "Auto-select Target"
|
||||
},
|
||||
"firmwareFlasherButtonLoadLocal": {
|
||||
"message": "Load Firmware [Local]"
|
||||
},
|
||||
|
@ -2210,7 +2216,7 @@
|
|||
"message": "Warning"
|
||||
},
|
||||
"firmwareFlasherWarningText": {
|
||||
"message": "Please do <span style=\"color: red\">not</span> try to flash <strong>non-iNAV</strong> hardware with this firmware flasher.<br />Do <span style=\"color: red\">not</span> <strong>disconnect</strong> the board or <strong>turn off</strong> your computer while flashing.<br /><br /><strong>Note: </strong>STM32 bootloader is stored in ROM, it cannot be bricked.<br /><strong>Note: </strong><span style=\"color: red\">Auto-Connect</span> is always disabled while you are inside firmware flasher.<br /><strong>Note: </strong>Make sure you have a backup; some upgrades/downgrades will wipe your configuration.<br /><strong>Note:</strong> If you have problems flashing try disconnecting all cables from your FC first, try rebooting, upgrade chrome, upgrade drivers.<br /><strong>Note:</strong> When flashing boards that have directly connected USB sockets (SPRacingF3Mini, Sparky, ColibriRace, etc) ensure you have read the USB Flashing section of the INAV manual and have the correct software and drivers installed"
|
||||
"message": "Please do <span style=\"color: red\">not</span> try to flash <strong>non-iNAV</strong> hardware with this firmware flasher.<br />Do <span style=\"color: red\">not</span> <strong>disconnect</strong> the board or <strong>turn off</strong> your computer while flashing.<br /><br /><strong>Note: </strong>STM32 bootloader is stored in ROM, it cannot be bricked.<br /><!--strong>Note: </strong><span style=\"color: red\">Auto-Connect</span> is always disabled while you are inside firmware flasher.<br / --><strong>Note: </strong>Make sure you have a backup; some upgrades/downgrades will wipe your configuration.<br /><strong>Note:</strong> If you have problems flashing try disconnecting all cables from your FC first, try rebooting, upgrade chrome, upgrade drivers.<br /><strong>Note:</strong> When flashing boards that have directly connected USB sockets (Matek H743-SLIM, Holybro Kakute etc) ensure you have read the USB Flashing section of the INAV manual and have the correct software and drivers installed"
|
||||
},
|
||||
"firmwareFlasherRecoveryHead": {
|
||||
"message": "<strong>Recovery / Lost communication<strong>"
|
||||
|
@ -4328,5 +4334,11 @@
|
|||
},
|
||||
"rcSmoothing": {
|
||||
"message": "RC Smoothing"
|
||||
},
|
||||
"throttle_scale": {
|
||||
"message": "Throttle scale"
|
||||
},
|
||||
"throttle_scale_help": {
|
||||
"message": "Allow to limit effective power fed to the motors. Throttle Scale 1 mean there is no power limiting. Throttle Scale 0.5 means throttle position will be cut in half before passed to the motors."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -287,19 +287,23 @@ helper.defaultsDialog = (function () {
|
|||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_p",
|
||||
value: 15
|
||||
value: 25
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_d",
|
||||
key: "nav_fw_pos_z_i",
|
||||
value: 5
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_d",
|
||||
value: 8
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_xy_p",
|
||||
value: 60
|
||||
value: 55
|
||||
},
|
||||
{
|
||||
key: "fw_turn_assist_pitch_gain",
|
||||
value: 0.5
|
||||
value: 0.4
|
||||
},
|
||||
{
|
||||
key: "max_angle_inclination_rll",
|
||||
|
@ -359,11 +363,19 @@ helper.defaultsDialog = (function () {
|
|||
},
|
||||
{
|
||||
key: "imu_acc_ignore_rate",
|
||||
value: 9
|
||||
value: 7
|
||||
},
|
||||
{
|
||||
key: "imu_acc_ignore_slope",
|
||||
value: 5
|
||||
value: 4
|
||||
},
|
||||
{
|
||||
key: "imu_dcm_kp",
|
||||
value: 1000
|
||||
},
|
||||
{
|
||||
key: "imu_dcm_ki",
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
key: "airmode_type",
|
||||
|
@ -393,6 +405,22 @@ helper.defaultsDialog = (function () {
|
|||
key: "nav_wp_radius",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_max_angle",
|
||||
value: 45
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_motor_delay",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_max_altitude",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_climb_angle",
|
||||
value: 25
|
||||
},
|
||||
],
|
||||
"features": [
|
||||
{
|
||||
|
@ -404,7 +432,7 @@ helper.defaultsDialog = (function () {
|
|||
{
|
||||
"title": 'Airplane without a Tail (Wing, Delta, etc)',
|
||||
"notRecommended": false,
|
||||
"id": 3,
|
||||
"id": 4,
|
||||
"reboot": true,
|
||||
"mixerToApply": 8,
|
||||
"settings": [
|
||||
|
@ -418,7 +446,7 @@ helper.defaultsDialog = (function () {
|
|||
},
|
||||
{
|
||||
key: "applied_defaults",
|
||||
value: 3
|
||||
value: 4
|
||||
},
|
||||
{
|
||||
key: "gyro_hardware_lpf",
|
||||
|
@ -486,19 +514,23 @@ helper.defaultsDialog = (function () {
|
|||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_p",
|
||||
value: 15
|
||||
value: 35
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_d",
|
||||
key: "nav_fw_pos_z_i",
|
||||
value: 5
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_z_d",
|
||||
value: 10
|
||||
},
|
||||
{
|
||||
key: "nav_fw_pos_xy_p",
|
||||
value: 60
|
||||
value: 70
|
||||
},
|
||||
{
|
||||
key: "fw_turn_assist_pitch_gain",
|
||||
value: 0.2
|
||||
value: 0.3
|
||||
},
|
||||
{
|
||||
key: "max_angle_inclination_rll",
|
||||
|
@ -564,6 +596,14 @@ helper.defaultsDialog = (function () {
|
|||
key: "imu_acc_ignore_slope",
|
||||
value: 5
|
||||
},
|
||||
{
|
||||
key: "imu_dcm_kp",
|
||||
value: 1000
|
||||
},
|
||||
{
|
||||
key: "imu_dcm_ki",
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
key: "airmode_type",
|
||||
value: "STICK_CENTER_ONCE"
|
||||
|
@ -592,6 +632,22 @@ helper.defaultsDialog = (function () {
|
|||
key: "nav_wp_radius",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_max_angle",
|
||||
value: 75
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_motor_delay",
|
||||
value: 100
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_max_altitude",
|
||||
value: 5000
|
||||
},
|
||||
{
|
||||
key: "nav_fw_launch_climb_angle",
|
||||
value: 25
|
||||
},
|
||||
],
|
||||
"features": [
|
||||
{
|
||||
|
@ -718,7 +774,9 @@ helper.defaultsDialog = (function () {
|
|||
GUI.tab_switch_cleanup(function () {
|
||||
MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, function () {
|
||||
//noinspection JSUnresolvedVariable
|
||||
if (typeof savingDefaultsModal !== 'undefined') {
|
||||
savingDefaultsModal.close();
|
||||
}
|
||||
GUI.log(chrome.i18n.getMessage('deviceRebooting'));
|
||||
GUI.handleReconnect();
|
||||
});
|
||||
|
@ -728,13 +786,21 @@ helper.defaultsDialog = (function () {
|
|||
};
|
||||
|
||||
privateScope.setSettings = function (selectedDefaultPreset) {
|
||||
var currentControlProfile = parseInt($("#profilechange").val());
|
||||
var currentBatteryProfile = parseInt($("#batteryprofilechange").val());
|
||||
//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
|
||||
|
@ -751,19 +817,50 @@ helper.defaultsDialog = (function () {
|
|||
|
||||
mspHelper.sendServoMixer(function () {
|
||||
mspHelper.sendMotorMixer(function () {
|
||||
privateScope.finalize(selectedDefaultPreset);
|
||||
})
|
||||
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 {
|
||||
privateScope.finalize(selectedDefaultPreset);
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
privateScope.onPresetClick = function (event) {
|
||||
savingDefaultsModal = new jBox('Modal', {
|
||||
width: 400,
|
||||
|
|
2
js/fc.js
|
@ -1249,7 +1249,7 @@ var FC = {
|
|||
4: {
|
||||
name: "Logic Condition",
|
||||
type: "range",
|
||||
range: [0, 31],
|
||||
range: [0, (LOGIC_CONDITIONS.getMaxLogicConditionCount()-1)],
|
||||
default: 0
|
||||
},
|
||||
5: {
|
||||
|
|
15
js/gui.js
|
@ -316,16 +316,27 @@ GUI_control.prototype.renderOperandValue = function ($container, operandMetadata
|
|||
* @param {function} onChange
|
||||
* @param {boolean} withAlways
|
||||
*/
|
||||
GUI_control.prototype.renderLogicConditionSelect = function ($container, logicConditions, current, onChange, withAlways) {
|
||||
GUI_control.prototype.renderLogicConditionSelect = function ($container, logicConditions, current, onChange, withAlways, onlyEnabled) {
|
||||
|
||||
let $select = $container.append('<select class="mix-rule-condition">').find("select"),
|
||||
lcCount = logicConditions.getCount();
|
||||
option = "";
|
||||
|
||||
if (withAlways) {
|
||||
$select.append('<option value="-1">Always</option>')
|
||||
}
|
||||
for (let i = 0; i < lcCount ; i++) {
|
||||
$select.append('<option value="' + i + '">Logic Condition ' + i + ' </option>');
|
||||
if (!onlyEnabled || i === current || (logicConditions.isEnabled(i))) {
|
||||
option = '<option';
|
||||
|
||||
if (i === current && !logicConditions.isEnabled(i)) {
|
||||
option+= ' class="lc_disabled"';
|
||||
}
|
||||
|
||||
option+= ' value="' + i + '">Logic Condition ' + i + ' </option>';
|
||||
|
||||
$select.append(option);
|
||||
}
|
||||
}
|
||||
|
||||
$select.val(current).change(onChange);
|
||||
|
|
|
@ -42,8 +42,9 @@ function generateFilename(prefix, suffix) {
|
|||
|
||||
if (CONFIG) {
|
||||
if (CONFIG.flightControllerIdentifier) {
|
||||
filename = CONFIG.flightControllerIdentifier + '_' + filename;
|
||||
filename = CONFIG.flightControllerIdentifier + '_' + CONFIG.flightControllerVersion + "_" + filename;
|
||||
}
|
||||
|
||||
if (CONFIG.name && CONFIG.name.trim() !== '') {
|
||||
filename = filename + '_' + CONFIG.name.trim().replace(' ', '_');
|
||||
}
|
||||
|
|
|
@ -221,6 +221,7 @@ let LogicCondition = function (enabled, activatorId, operation, operandAType, op
|
|||
LOGIC_CONDITIONS,
|
||||
self.getActivatorId,
|
||||
self.onActivatorChange,
|
||||
true,
|
||||
true
|
||||
);
|
||||
} else {
|
||||
|
|
|
@ -28,6 +28,10 @@ let LogicConditionsCollection = function () {
|
|||
return data.length
|
||||
};
|
||||
|
||||
self.isEnabled = function (lcID) {
|
||||
return data[lcID].getEnabled();
|
||||
}
|
||||
|
||||
self.open = function () {
|
||||
self.render();
|
||||
$container.show();
|
||||
|
|
|
@ -44,7 +44,7 @@ var mspHelper = (function (gui) {
|
|||
'DJI_FPV': 21,
|
||||
'SMARTPORT_MASTER': 23,
|
||||
'IMU2': 24,
|
||||
'HDZERO_VTX': 25,
|
||||
'MSP_DISPLAYPORT': 25,
|
||||
};
|
||||
|
||||
// Required for MSP_DEBUGMSG because console.log() doesn't allow omitting
|
||||
|
@ -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();
|
||||
|
|
|
@ -173,19 +173,20 @@ var Settings = (function () {
|
|||
|
||||
let dataStep = input.data("step");
|
||||
|
||||
if (dataStep !== undefined) {
|
||||
input.attr('step', dataStep);
|
||||
} else {
|
||||
input.attr('step', "0.01");
|
||||
if (typeof dataStep === 'undefined') {
|
||||
dataStep = self.countDecimals(s.value);
|
||||
dataStep = 1 / Math.pow(10, dataStep);
|
||||
input.data("step", dataStep);
|
||||
}
|
||||
|
||||
input.attr('step', dataStep);
|
||||
input.attr('min', s.setting.min);
|
||||
input.attr('max', s.setting.max);
|
||||
input.val(s.value.toFixed(2));
|
||||
|
||||
input.val(s.value.toFixed(self.countDecimals(dataStep)));
|
||||
} else {
|
||||
var multiplier = parseFloat(input.data('setting-multiplier') || 1);
|
||||
|
||||
input.data("step", 1);
|
||||
input.val((s.value / multiplier).toFixed(Math.log10(multiplier)));
|
||||
input.attr('type', 'number');
|
||||
if (typeof s.setting.min !== 'undefined' && s.setting.min !== null) {
|
||||
|
@ -449,7 +450,7 @@ var Settings = (function () {
|
|||
'm-lrg' : 'mi',
|
||||
'cms' : 'mph',
|
||||
'v-cms' : 'fts',
|
||||
'decadegps' : 'degpd',
|
||||
'decadegps' : 'degps',
|
||||
'decideg' : 'deg',
|
||||
'decideg-lrg' : 'deg',
|
||||
'msec' : 'sec',
|
||||
|
@ -498,38 +499,33 @@ var Settings = (function () {
|
|||
const multiplier = multiObj.multiplier;
|
||||
const unitName = multiObj.unitName;
|
||||
|
||||
let decimalPlaces = 0;
|
||||
// Update the step, min, and max; as we have the multiplier here.
|
||||
if (element.attr('type') == 'number') {
|
||||
let step = element.attr('step') || 1;
|
||||
let decimalPlaces = 0;
|
||||
let step = parseFloat(element.attr('step')) || 1;
|
||||
|
||||
step = step / multiplier;
|
||||
|
||||
if (step < 1) {
|
||||
decimalPlaces = step.toString().length - step.toString().indexOf(".") - 1;
|
||||
if (parseInt(step.toString().slice(-1)) > 1 ) {
|
||||
decimalPlaces--;
|
||||
}
|
||||
if (multiplier !== 1) {
|
||||
decimalPlaces = Math.min(Math.ceil(multiplier / 100), 3);
|
||||
step = 1 / Math.pow(10, decimalPlaces);
|
||||
}
|
||||
element.attr('step', step.toFixed(decimalPlaces));
|
||||
|
||||
if (multiplier != 'FAHREN') {
|
||||
element.attr('min', (element.attr('min') / multiplier).toFixed(decimalPlaces));
|
||||
element.attr('max', (element.attr('max') / multiplier).toFixed(decimalPlaces));
|
||||
if (multiplier !== 'FAHREN' && multiplier !== 1) {
|
||||
element.attr('min', (parseFloat(element.attr('min')) / multiplier).toFixed(decimalPlaces));
|
||||
element.attr('max', (parseFloat(element.attr('max')) / multiplier).toFixed(decimalPlaces));
|
||||
}
|
||||
}
|
||||
|
||||
// Update the input with a new formatted unit
|
||||
let newValue = "";
|
||||
if (multiplier == 'FAHREN') {
|
||||
element.attr('min', toFahrenheit(element.attr('min')).toFixed(2));
|
||||
element.attr('max', toFahrenheit(element.attr('max')).toFixed(2));
|
||||
newValue = toFahrenheit(oldValue).toFixed(2);
|
||||
if (multiplier === 'FAHREN') {
|
||||
element.attr('min', toFahrenheit(element.attr('min')).toFixed(decimalPlaces));
|
||||
element.attr('max', toFahrenheit(element.attr('max')).toFixed(decimalPlaces));
|
||||
newValue = toFahrenheit(oldValue).toFixed(decimalPlaces);
|
||||
} else {
|
||||
const convertedValue = Number((oldValue / multiplier).toFixed(2));
|
||||
newValue = Number.isInteger(convertedValue) ? Math.round(convertedValue) : convertedValue;
|
||||
newValue = Number((oldValue / multiplier)).toFixed(decimalPlaces);
|
||||
}
|
||||
|
||||
element.val(newValue);
|
||||
element.data('setting-multiplier', multiplier);
|
||||
|
||||
|
@ -564,12 +560,36 @@ var Settings = (function () {
|
|||
value = Math.round(((parseFloat(input.val())-32) / 1.8) * 10);
|
||||
} else {
|
||||
multiplier = parseFloat(multiplier);
|
||||
|
||||
let presicion = input.data("step") || 1; // data-step is always based on the default firmware units.
|
||||
presicion = self.countDecimals(presicion);
|
||||
|
||||
if (presicion === 0) {
|
||||
value = Math.round(parseFloat(input.val()) * multiplier);
|
||||
} else {
|
||||
value = Math.round((parseFloat(input.val()) * multiplier) * Math.pow(10, presicion)) / Math.pow(10, presicion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return mspHelper.setSetting(settingName, value);
|
||||
};
|
||||
|
||||
self.countDecimals = function(value) {
|
||||
let text = value.toString()
|
||||
// verify if number 0.000005 is represented as "5e-6"
|
||||
if (text.indexOf('e-') > -1) {
|
||||
let [base, trail] = text.split('e-');
|
||||
let deg = parseInt(trail, 10);
|
||||
return deg;
|
||||
}
|
||||
// count decimals for number in representation like "0.123456"
|
||||
if (Math.floor(value) !== value) {
|
||||
return value.toString().split(".")[1].length || 0;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
self.saveInputs = function() {
|
||||
var inputs = [];
|
||||
$('[data-setting!=""][data-setting]').each(function() {
|
||||
|
|
4
main.css
|
@ -2010,6 +2010,10 @@ select {
|
|||
padding: 1px;
|
||||
}
|
||||
|
||||
.lc_disabled {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.ic_osd {
|
||||
background-image: url("../images/icons/icon_osd.svg");
|
||||
background-position-y: 4px;
|
||||
|
|
2
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'));
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 11 KiB |