Merge branch 'master' into dzikuvx-pid-bank-11
10
README.md
|
@ -26,6 +26,14 @@ Depending on target operating system, _INAV Configurator_ is distributed as _sta
|
|||
1. Run INAV Configurator app from unpacked folder
|
||||
1. Configurator is not signed, so you have to allow Windows to run untrusted application. There might be a monit for it during first run
|
||||
|
||||
### Linux
|
||||
|
||||
1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases)
|
||||
1. Download Configurator for Linux platform (linux32 and linux64 are present)
|
||||
1. Extract tar.gz archive
|
||||
1. Make the inav-configurator file executable (chmod +x inav-configurator)
|
||||
1. Run INAV Configurator app from unpacked folder
|
||||
|
||||
### Mac
|
||||
|
||||
1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases)
|
||||
|
@ -46,7 +54,7 @@ For local development, **node.js** build system is used.
|
|||
1. From project folder run `npm install`
|
||||
1. To build the JS and CSS files and start the configurator:
|
||||
- With NW.js: Run `npm start`.
|
||||
- With Chrome: Run `./node_modules/gulp/bin/gulp.js`. Then open `chrome://extensions`, enable
|
||||
- With Chrome: Run `npm run gulp`. Then open `chrome://extensions`, enable
|
||||
the `Developer mode`, click on the `Load unpacked extension...` button and select the `inav-configurator` directory.
|
||||
|
||||
Other tasks are also defined in `gulpfile.js`. To run a task, use `./node_modules/gulp/bin/gulp.js task-name`. Available ones are:
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
"tabGPS": {
|
||||
"message": "GPS"
|
||||
},
|
||||
"tabMotorTesting": {
|
||||
"tabOutputs": {
|
||||
"message": "Outputs"
|
||||
},
|
||||
"tabLedStrip": {
|
||||
|
@ -505,7 +505,7 @@
|
|||
"message": "In-flight level calibration"
|
||||
},
|
||||
"featureMOTOR_STOP": {
|
||||
"message": "Don't spin the motors when armed"
|
||||
"message": "Stop motors on low throttle"
|
||||
},
|
||||
"featureSERVO_TILT": {
|
||||
"message": "Servo gimbal"
|
||||
|
@ -546,8 +546,8 @@
|
|||
"featureCURRENT_METER": {
|
||||
"message": "Battery current monitoring"
|
||||
},
|
||||
"feature3D": {
|
||||
"message": "3D mode (for use with reversible ESCs)"
|
||||
"featureREVERSIBLE_MOTORS": {
|
||||
"message": "Reversible motors mode (for use with reversible ESCs)"
|
||||
},
|
||||
"featureRSSI_ADC": {
|
||||
"message": "Analog RSSI input"
|
||||
|
@ -636,11 +636,17 @@
|
|||
"configurationEscFeatures": {
|
||||
"message": "ESC/Motor Features"
|
||||
},
|
||||
"serialrx_inverted": {
|
||||
"message": "Serial Port Inverted (comparing to protocol default)"
|
||||
},
|
||||
"serialrx_halfduplex" : {
|
||||
"message": "Serial receiver half-duplex"
|
||||
},
|
||||
"configurationFeaturesHelp": {
|
||||
"message": "<strong>Note:</strong> Not all combinations of features are valid. When the flight controller firmware detects invalid feature combinations conflicting features will be disabled.<br /><strong>Note:</strong> Configure serial ports <span style=\"color: red\">before</span> enabling the features that will use the ports."
|
||||
},
|
||||
"configurationSerialRXHelp": {
|
||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) and choose a Serial Receiver Provider when using RX_SERIAL feature."
|
||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) for the serial receiver"
|
||||
},
|
||||
"configurationBoardAlignment": {
|
||||
"message": "Board and Sensor Alignment"
|
||||
|
@ -654,12 +660,6 @@
|
|||
"configurationBoardAlignmentYaw": {
|
||||
"message": "Yaw Degrees"
|
||||
},
|
||||
"configurationSensorAlignmentGyro": {
|
||||
"message": "GYRO Alignment"
|
||||
},
|
||||
"configurationSensorAlignmentAcc": {
|
||||
"message": "ACCEL Alignment"
|
||||
},
|
||||
"configurationSensorAlignmentMag": {
|
||||
"message": "MAG Alignment"
|
||||
},
|
||||
|
@ -757,19 +757,19 @@
|
|||
"message": "Battery Capacity Unit"
|
||||
},
|
||||
"configuration3d": {
|
||||
"message": "3D"
|
||||
"message": "Reversible motors"
|
||||
},
|
||||
"configuration3dDeadbandLow": {
|
||||
"message": "3D Deadband Low"
|
||||
"message": "Reversible Motors Deadband Low"
|
||||
},
|
||||
"configuration3dDeadbandHigh": {
|
||||
"message": "3D Deadband High"
|
||||
"message": "Reversible Motors Deadband High"
|
||||
},
|
||||
"configuration3dNeutral": {
|
||||
"message": "3D Neutral"
|
||||
"message": "Reversible Motors Neutral"
|
||||
},
|
||||
"configuration3dDeadbandThrottle": {
|
||||
"message": "3D Deadband Throttle"
|
||||
"message": "Reversible Motors Deadband Throttle"
|
||||
},
|
||||
"configurationSystem": {
|
||||
"message": "System configuration"
|
||||
|
@ -795,6 +795,9 @@
|
|||
"configurationGPSHelp": {
|
||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) when using GPS feature."
|
||||
},
|
||||
"receiverType": {
|
||||
"message": "Receiver type"
|
||||
},
|
||||
"configurationSerialRX": {
|
||||
"message": "Serial Receiver Provider"
|
||||
},
|
||||
|
@ -927,6 +930,9 @@
|
|||
"portsFunction_FRSKY_OSD": {
|
||||
"message": "FrSky OSD"
|
||||
},
|
||||
"portsFunction_DJI_FPV": {
|
||||
"message": "DJI FPV VTX"
|
||||
},
|
||||
"pidTuningName": {
|
||||
"message": "Name"
|
||||
},
|
||||
|
@ -1940,9 +1946,6 @@
|
|||
"warning": {
|
||||
"message": "Warning"
|
||||
},
|
||||
"boardLimitedFunctionality": {
|
||||
"message": "Due to limited flash size, the board you have selected will have limited functionality, not all functions and features will be available. Hardware support map is available on <a href=\"https://github.com/iNavFlight/inav/wiki/Hardware-support-map\" target=\"_blank\">INAV Wiki pages</a>"
|
||||
},
|
||||
"escProtocol": {
|
||||
"message": "ESC protocol"
|
||||
},
|
||||
|
@ -1962,7 +1965,7 @@
|
|||
"message" : "Servo has to support refresh rate. Change only if you know that servo supports it. Too high refresh rate might damage servos!"
|
||||
},
|
||||
"logPwmOutputDisabled": {
|
||||
"message" : "PWM output is disabled. Motors and servos will not work. Use <u>Configuration</u> tab to enable!"
|
||||
"message" : "PWM output is disabled. Motors and servos will not work. Use <u>Outputs</u> tab to enable!"
|
||||
},
|
||||
"configurationGyroSyncTitle": {
|
||||
"message" : "Synchronize looptime with gyroscope"
|
||||
|
@ -2202,7 +2205,7 @@
|
|||
"message": "Warning"
|
||||
},
|
||||
"presetApplyDescription": {
|
||||
"message": "Preset overwrites selected configuration values including mixer, filtering, PIDs and other. Settings like: flight modes, radio settings, failsafe and OSD are not changed. Applied values should <strong>NOT</strong> treated as final values, but entry points for final tuning. <br> Always check new configuration before flying!"
|
||||
"message": "<p style='color: darkred;'>Make sure that <strong>mixer</strong> was configured before applying any Presets!</p><p>Preset overwrites selected configuration values including mixer, filtering, PIDs and other. Settings like: flight modes, radio settings, failsafe and OSD are not changed. Applied values should <strong>NOT</strong> treated as final values, but entry points for final tuning. <br> Always check new configuration before flying!</p>"
|
||||
},
|
||||
"OK": {
|
||||
"message": "OK"
|
||||
|
@ -2963,6 +2966,9 @@
|
|||
"input": {
|
||||
"message": "Input"
|
||||
},
|
||||
"fixedValue": {
|
||||
"message": "Fixed Value (µs)"
|
||||
},
|
||||
"weight": {
|
||||
"message": "Weight (%)"
|
||||
},
|
||||
|
@ -3167,11 +3173,47 @@
|
|||
"gyro_lpf_type_help": {
|
||||
"message": "BIQUAD offers better noise attenuation for a price of higher delay. PT1 has lower attenuation but offers lower delay."
|
||||
},
|
||||
"gyro_stage2_lowpass_type": {
|
||||
"message": "Gyro Stage 2 LPF type"
|
||||
},
|
||||
"gyro_stage2_lowpass_type_help": {
|
||||
"message": "BIQUAD offers better noise attenuation for a price of higher delay. PT1 has lower attenuation but offers lower delay."
|
||||
},
|
||||
"dterm_lpf_type": {
|
||||
"message": "D-term LPF type"
|
||||
},
|
||||
"dterm_lpf_type_help": {
|
||||
"message": "BIQUAD offers better noise attenuation for a price of higher delay. PT1 has lower attenuation but offers lower delay."
|
||||
},
|
||||
"dterm_lpf2_type": {
|
||||
"message": "D-term Stage 2 LPF type"
|
||||
},
|
||||
"dterm_lpf2_type_help": {
|
||||
"message": "BIQUAD offers better noise attenuation for a price of higher delay. PT1 has lower attenuation but offers lower delay."
|
||||
},
|
||||
"dterm_lpf2_hz": {
|
||||
"message": "D-term Stage 2 LPF cutoff frequency"
|
||||
},
|
||||
"dterm_lpf2_hz_help": {
|
||||
"message": "Lowpass cutoff filter for D-term on ROLL and PITCH axises. 0 mean filter is disabled"
|
||||
},
|
||||
"tabFilteringAdvanced": {
|
||||
"message": "Other filters"
|
||||
},
|
||||
"mainFilters": {
|
||||
"message": "Main filters"
|
||||
"message": "Gyro filters"
|
||||
},
|
||||
"rpmFilters": {
|
||||
"message": "Gyro RPM filters"
|
||||
},
|
||||
"dtermFilters": {
|
||||
"message": "D-term filters"
|
||||
},
|
||||
"rpm_gyro_filter_enabled": {
|
||||
"message": "Gyro RPM filter (requires ESC telemetry)"
|
||||
},
|
||||
"rpm_gyro_min_hz": {
|
||||
"message": "Gyro RPM filter min. frequency"
|
||||
},
|
||||
"acc_lpf_type": {
|
||||
"message": "Accelerometer LPF type"
|
||||
|
@ -3238,5 +3280,23 @@
|
|||
},
|
||||
"defaultsDialogInfo": {
|
||||
"message": "INAV Configurator would like to know which kind of UAV you are configuring. Based on this information it will modify some default values to unlock the best flying performance. "
|
||||
},
|
||||
"throttleIdle": {
|
||||
"message": "Motors IDLE power [%]"
|
||||
},
|
||||
"throttleIdleDigitalInfo": {
|
||||
"message": "For digital protocols, IDLE can be lowered even down to 5-7% without motors stopping in the air. If a drone wobbles after pulling throttle low, try increasing IDLE to tune this behavior out."
|
||||
},
|
||||
"throttleIdleAnalogInfo": {
|
||||
"message": "For analog protocols, IDLE can be lowered below 10% if motors are working smooth without stuttering. If a drone wobbles after pulling throttle low, try increasing IDLE to tune this behavior out."
|
||||
},
|
||||
"motor_poles": {
|
||||
"message": "Number of motor poles (number of magnets)"
|
||||
},
|
||||
"motorStopWarning": {
|
||||
"message": "Should be enabled on Airplanes, Rovers and Boats. Should not be enabled on Multirotors! On Multirotors, when Airmode is active, motors will not stop."
|
||||
},
|
||||
"dynamic_gyro_notch_enabled_help": {
|
||||
"message": "Matrix Gyro Filter is the new generation of dynamic gyro notches available in INAV. It is recommended to enable it on all Multirotor builds on F4 and F7 flight controllers."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,6 +108,7 @@ sources.js = [
|
|||
'./js/vtx.js',
|
||||
'./main.js',
|
||||
'./js/tabs.js',
|
||||
'./js/preset_definitions.js',
|
||||
'./tabs/*.js',
|
||||
'./js/eventFrequencyAnalyzer.js',
|
||||
'./js/periodicStatusUpdater.js',
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
var CONFIGURATOR = {
|
||||
// all versions are specified and compared using semantic versioning http://semver.org/
|
||||
'minfirmwareVersionAccepted': '2.2.0',
|
||||
'maxFirmwareVersionAccepted': '2.5.0', // COndition is < (lt) so we accept all in 2.2 branch, not 2.3 actualy
|
||||
'minfirmwareVersionAccepted': '2.4.0',
|
||||
'maxFirmwareVersionAccepted': '2.6.0', // COndition is < (lt) so we accept all in 2.2 branch, not 2.3 actualy
|
||||
'connectionValid': false,
|
||||
'connectionValidCliOnly': false,
|
||||
'cliActive': false,
|
||||
|
|
|
@ -43,6 +43,10 @@ helper.defaultsDialog = (function() {
|
|||
},
|
||||
{
|
||||
key: "mc_iterm_relax_type",
|
||||
value: "SETPOINT"
|
||||
},
|
||||
{
|
||||
key: "mc_iterm_relax",
|
||||
value: "RP"
|
||||
},
|
||||
{
|
||||
|
|
123
js/fc.js
|
@ -30,7 +30,7 @@ var CONFIG,
|
|||
ARMING_CONFIG,
|
||||
FC_CONFIG,
|
||||
MISC,
|
||||
_3D,
|
||||
REVERSIBLE_MOTORS,
|
||||
DATAFLASH,
|
||||
SDCARD,
|
||||
BLACKBOX,
|
||||
|
@ -415,11 +415,11 @@ var FC = {
|
|||
emergencyDescentRate: null
|
||||
};
|
||||
|
||||
_3D = {
|
||||
deadband3d_low: 0,
|
||||
deadband3d_high: 0,
|
||||
neutral3d: 0,
|
||||
deadband3d_throttle: 0
|
||||
REVERSIBLE_MOTORS = {
|
||||
deadband_low: 0,
|
||||
deadband_high: 0,
|
||||
neutral: 0,
|
||||
deadband_throttle: 0
|
||||
};
|
||||
|
||||
DATAFLASH = {
|
||||
|
@ -549,7 +549,7 @@ var FC = {
|
|||
{bit: 7, group: 'gps', name: 'GPS', haveTip: true},
|
||||
{bit: 10, group: 'other', name: 'TELEMETRY', showNameInTip: true},
|
||||
{bit: 11, group: 'batteryCurrent', name: 'CURRENT_METER'},
|
||||
{bit: 12, group: 'other', name: '3D', showNameInTip: true},
|
||||
{bit: 12, group: 'other', name: 'REVERSIBLE_MOTORS', showNameInTip: true},
|
||||
{bit: 15, group: 'other', name: 'RSSI_ADC', haveTip: true, showNameInTip: true},
|
||||
{bit: 16, group: 'other', name: 'LED_STRIP', showNameInTip: true},
|
||||
{bit: 17, group: 'other', name: 'DASHBOARD', showNameInTip: true},
|
||||
|
@ -562,10 +562,13 @@ var FC = {
|
|||
{bit: 30, group: 'other', name: 'FW_LAUNCH', haveTip: false, showNameInTip: false},
|
||||
{bit: 2, group: 'other', name: 'TX_PROF_SEL', haveTip: false, showNameInTip: false},
|
||||
{bit: 0, group: 'other', name: 'THR_VBAT_COMP', haveTip: true, showNameInTip: true},
|
||||
{bit: 3, group: 'other', name: 'BAT_PROFILE_AUTOSWITCH', haveTip: true, showNameInTip: true},
|
||||
{bit: 5, group: 'other', name: 'DYNAMIC_FILTERS', haveTip: true, showNameInTip: true}
|
||||
{bit: 3, group: 'other', name: 'BAT_PROFILE_AUTOSWITCH', haveTip: true, showNameInTip: true}
|
||||
];
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.4.0") && semver.lt(CONFIG.flightControllerVersion, "2.5.0")) {
|
||||
features.push({bit: 5, group: 'other', name: 'DYNAMIC_FILTERS', haveTip: true, showNameInTip: true});
|
||||
}
|
||||
|
||||
return features.reverse();
|
||||
},
|
||||
isFeatureEnabled: function (featureName, features) {
|
||||
|
@ -695,94 +698,6 @@ var FC = {
|
|||
'Disabled'
|
||||
];
|
||||
},
|
||||
getRxTypes: function() {
|
||||
// Keep value field in sync with rxReceiverType_e in rx.h
|
||||
var rxTypes = [
|
||||
{
|
||||
name: 'RX_SERIAL',
|
||||
bit: 3,
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
name: 'RX_PPM',
|
||||
bit: 0,
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
name: 'RX_PWM',
|
||||
bit: 13,
|
||||
value: 1,
|
||||
},
|
||||
];
|
||||
|
||||
if (semver.gte(CONFIG.apiVersion, "1.21.0")) {
|
||||
rxTypes.push({
|
||||
name: 'RX_SPI',
|
||||
bit: 25,
|
||||
value: 5,
|
||||
});
|
||||
}
|
||||
|
||||
rxTypes.push({
|
||||
name: 'RX_MSP',
|
||||
bit: 14,
|
||||
value: 4,
|
||||
});
|
||||
|
||||
// Versions using feature bits don't allow not having an
|
||||
// RX and fallback to RX_PPM.
|
||||
rxTypes.push({
|
||||
name: 'RX_NONE',
|
||||
value: 0,
|
||||
});
|
||||
|
||||
return rxTypes;
|
||||
},
|
||||
isRxTypeEnabled: function(rxType) {
|
||||
if (typeof rxType === 'string') {
|
||||
var types = this.getRxTypes();
|
||||
for (var ii = 0; ii < types.length; ii++) {
|
||||
if (types[ii].name == rxType) {
|
||||
rxType = types[ii];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return RX_CONFIG.receiver_type == rxType.value;
|
||||
},
|
||||
setRxTypeEnabled: function(rxType) {
|
||||
RX_CONFIG.receiver_type = rxType.value;
|
||||
},
|
||||
getSerialRxTypes: function () {
|
||||
var data = [
|
||||
'SPEKTRUM1024',
|
||||
'SPEKTRUM2048',
|
||||
'SBUS',
|
||||
'SUMD',
|
||||
'SUMH',
|
||||
'XBUS_MODE_B',
|
||||
'XBUS_MODE_B_RJ01',
|
||||
'IBUS',
|
||||
'JETI EXBUS',
|
||||
'TBS Crossfire',
|
||||
'FPort'
|
||||
];
|
||||
|
||||
return data;
|
||||
},
|
||||
getSPIProtocolTypes: function () {
|
||||
return [
|
||||
'V202 250Kbps',
|
||||
'V202 1Mbps',
|
||||
'Syma X',
|
||||
'Syma X5C',
|
||||
'Cheerson CX10',
|
||||
'Cheerson CX10A',
|
||||
'JJRC H8_3D',
|
||||
'iNav Reference protocol',
|
||||
'eLeReS'
|
||||
];
|
||||
},
|
||||
getSensorAlignments: function () {
|
||||
return [
|
||||
'CW 0°',
|
||||
|
@ -1077,7 +992,7 @@ var FC = {
|
|||
];
|
||||
},
|
||||
getServoMixInputName: function (input) {
|
||||
return getServoMixInputNames()[input];
|
||||
return this.getServoMixInputNames()[input];
|
||||
},
|
||||
getModeId: function (name) {
|
||||
for (var i = 0; i < AUX_CONFIG.length; i++) {
|
||||
|
@ -1090,7 +1005,7 @@ var FC = {
|
|||
return bit_check(CONFIG.mode[Math.trunc(i / 32)], i % 32);
|
||||
},
|
||||
isModeEnabled: function (name) {
|
||||
return FC.isModeBitSet(FC.getModeId(name));
|
||||
return this.isModeBitSet(this.getModeId(name));
|
||||
},
|
||||
getLogicOperators: function () {
|
||||
return {
|
||||
|
@ -1190,7 +1105,15 @@ var FC = {
|
|||
14: "Throttle position [%]",
|
||||
15: "Roll [deg]",
|
||||
16: "Pitch [deg]",
|
||||
17: "Flight mode"
|
||||
17: "Is Armed",
|
||||
18: "Is Autolaunch",
|
||||
19: "Is Controlling Altitude",
|
||||
20: "Is Controlling Position",
|
||||
21: "Is Emergency Landing",
|
||||
22: "Is RTH",
|
||||
23: "Is WP",
|
||||
24: "Is Landing",
|
||||
25: "Is Failsafe"
|
||||
}
|
||||
},
|
||||
3: {
|
||||
|
|
22
js/gui.js
|
@ -28,7 +28,7 @@ var GUI_control = function () {
|
|||
'logging',
|
||||
'onboard_logging',
|
||||
'modes',
|
||||
'motors',
|
||||
'outputs',
|
||||
'pid_tuning',
|
||||
'ports',
|
||||
'receiver',
|
||||
|
@ -128,7 +128,7 @@ GUI_control.prototype.switchery = function() {
|
|||
|
||||
|
||||
GUI_control.prototype.content_ready = function (callback) {
|
||||
|
||||
const content = $('#content').removeClass('loading');
|
||||
$('.togglesmall').each(function(index, elem) {
|
||||
var switchery = new Switchery(elem, {
|
||||
size: 'small',
|
||||
|
@ -190,7 +190,13 @@ GUI_control.prototype.content_ready = function (callback) {
|
|||
});
|
||||
});
|
||||
|
||||
if (callback) callback();
|
||||
const duration = content.data('empty') ? 0 : 400;
|
||||
$('#content .data-loading').fadeOut(duration, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
GUI_control.prototype.updateStatusBar = function() {
|
||||
|
@ -243,5 +249,15 @@ GUI_control.prototype.simpleBind = function () {
|
|||
});
|
||||
};
|
||||
|
||||
GUI_control.prototype.load = function(rel, callback) {
|
||||
const content = $('#content').addClass('loading');
|
||||
$.get(rel, function(data) {
|
||||
$(data).appendTo(content);
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// initialize object into GUI variable
|
||||
var GUI = new GUI_control();
|
||||
|
|
|
@ -102,3 +102,14 @@ DataView.prototype.readString = function() {
|
|||
}
|
||||
return s;
|
||||
};
|
||||
|
||||
DataView.prototype.asHex = function() {
|
||||
let s = "";
|
||||
for (let ii = 0; ii < this.byteLength; ii++) {
|
||||
if (ii == this.offset) {
|
||||
s += "/"
|
||||
}
|
||||
s += this.getUint8(ii).toString(16);
|
||||
}
|
||||
return s;
|
||||
};
|
||||
|
|
|
@ -19,8 +19,12 @@ function localize() {
|
|||
$('[data-i18n]:not(.i18n-replaced)').each(function() {
|
||||
var element = $(this);
|
||||
|
||||
element.html(translate(element.data('i18n')));
|
||||
const translated = translate(element.data('i18n'));
|
||||
element.html(translated);
|
||||
element.addClass('i18n-replaced');
|
||||
if (element.attr("title") !== "") {
|
||||
element.attr("title", translated);
|
||||
}
|
||||
});
|
||||
|
||||
$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
|
||||
|
|
52
js/model.js
|
@ -517,6 +517,52 @@ const mixerList = [
|
|||
new ServoMixRule(3, INPUT_STABILIZED_YAW, 50, 0),
|
||||
new ServoMixRule(4, INPUT_STABILIZED_YAW, 50, 0),
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 31,
|
||||
name: 'Rover',
|
||||
model: 'custom',
|
||||
image: 'custom',
|
||||
enabled: true,
|
||||
legacy: false,
|
||||
platform: PLATFORM_ROVER,
|
||||
motorMixer: [
|
||||
new MotorMixRule(1.0, 0.0, 0.0, 0.0),
|
||||
],
|
||||
servoMixer: [
|
||||
new ServoMixRule(3, INPUT_STABILIZED_YAW, 100, 0),
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 32,
|
||||
name: 'Boat',
|
||||
model: 'custom',
|
||||
image: 'custom',
|
||||
enabled: true,
|
||||
legacy: false,
|
||||
platform: PLATFORM_BOAT,
|
||||
motorMixer: [
|
||||
new MotorMixRule(1.0, 0.0, 0.0, 0.0),
|
||||
],
|
||||
servoMixer: [
|
||||
new ServoMixRule(3, INPUT_STABILIZED_YAW, 100, 0),
|
||||
]
|
||||
}
|
||||
,
|
||||
{
|
||||
id: 33,
|
||||
name: 'Other',
|
||||
model: 'custom',
|
||||
image: 'custom',
|
||||
enabled: true,
|
||||
legacy: false,
|
||||
platform: PLATFORM_OTHER,
|
||||
motorMixer: [
|
||||
new MotorMixRule(1.0, 0.0, 0.0, 0.0),
|
||||
],
|
||||
servoMixer: [
|
||||
new ServoMixRule(3, INPUT_STABILIZED_YAW, 100, 0),
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -548,19 +594,19 @@ const platformList = [
|
|||
{
|
||||
id: 4,
|
||||
name: "Rover",
|
||||
enabled: false,
|
||||
enabled: true,
|
||||
flapsPossible: false
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: "Boat",
|
||||
enabled: false,
|
||||
enabled: true,
|
||||
flapsPossible: false
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
name: "Other",
|
||||
enabled: false,
|
||||
enabled: true,
|
||||
flapsPossible: false
|
||||
}
|
||||
];
|
||||
|
|
|
@ -52,6 +52,7 @@ var mspHelper = (function (gui) {
|
|||
'ESC': 18,
|
||||
'GSM_SMS': 19,
|
||||
'FRSKY_OSD': 20,
|
||||
'DJI_FPV': 21,
|
||||
};
|
||||
|
||||
// Required for MSP_DEBUGMSG because console.log() doesn't allow omitting
|
||||
|
@ -409,14 +410,14 @@ var mspHelper = (function (gui) {
|
|||
BATTERY_CONFIG.battery_capacity_unit = (data.getUint8(offset++) ? 'mWh' : 'mAh');
|
||||
break;
|
||||
case MSPCodes.MSP_3D:
|
||||
_3D.deadband3d_low = data.getUint16(offset, true);
|
||||
REVERSIBLE_MOTORS.deadband_low = data.getUint16(offset, true);
|
||||
offset += 2;
|
||||
_3D.deadband3d_high = data.getUint16(offset, true);
|
||||
REVERSIBLE_MOTORS.deadband_high = data.getUint16(offset, true);
|
||||
offset += 2;
|
||||
_3D.neutral3d = data.getUint16(offset, true);
|
||||
REVERSIBLE_MOTORS.neutral = data.getUint16(offset, true);
|
||||
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
||||
offset += 2;
|
||||
_3D.deadband3d_throttle = data.getUint16(offset, true);
|
||||
REVERSIBLE_MOTORS.deadband_throttle = data.getUint16(offset, true);
|
||||
}
|
||||
break;
|
||||
case MSPCodes.MSP_MOTOR_PINS:
|
||||
|
@ -586,7 +587,7 @@ var mspHelper = (function (gui) {
|
|||
RC_deadband.yaw_deadband = data.getUint8(offset++);
|
||||
RC_deadband.alt_hold_deadband = data.getUint8(offset++);
|
||||
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
||||
_3D.deadband3d_throttle = data.getUint16(offset, true);
|
||||
REVERSIBLE_MOTORS.deadband_throttle = data.getUint16(offset, true);
|
||||
}
|
||||
break;
|
||||
case MSPCodes.MSP_SENSOR_ALIGNMENT:
|
||||
|
@ -1494,7 +1495,10 @@ var mspHelper = (function (gui) {
|
|||
dataHandler.callbacks.splice(i, 1);
|
||||
|
||||
// fire callback
|
||||
if (callback) callback({'command': dataHandler.code, 'data': data, 'length': dataHandler.message_length_expected});
|
||||
if (callback) {
|
||||
callback({'command': dataHandler.code, 'data': data, 'length': dataHandler.message_length_expected});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1799,15 +1803,15 @@ var mspHelper = (function (gui) {
|
|||
break;
|
||||
|
||||
case MSPCodes.MSP_SET_3D:
|
||||
buffer.push(lowByte(_3D.deadband3d_low));
|
||||
buffer.push(highByte(_3D.deadband3d_low));
|
||||
buffer.push(lowByte(_3D.deadband3d_high));
|
||||
buffer.push(highByte(_3D.deadband3d_high));
|
||||
buffer.push(lowByte(_3D.neutral3d));
|
||||
buffer.push(highByte(_3D.neutral3d));
|
||||
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_low));
|
||||
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_low));
|
||||
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_high));
|
||||
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_high));
|
||||
buffer.push(lowByte(REVERSIBLE_MOTORS.neutral));
|
||||
buffer.push(highByte(REVERSIBLE_MOTORS.neutral));
|
||||
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
||||
buffer.push(lowByte(_3D.deadband3d_throttle));
|
||||
buffer.push(highByte(_3D.deadband3d_throttle));
|
||||
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1816,8 +1820,8 @@ var mspHelper = (function (gui) {
|
|||
buffer.push(RC_deadband.yaw_deadband);
|
||||
buffer.push(RC_deadband.alt_hold_deadband);
|
||||
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
||||
buffer.push(lowByte(_3D.deadband3d_throttle));
|
||||
buffer.push(highByte(_3D.deadband3d_throttle));
|
||||
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
1408
js/preset_definitions.js
Normal file
|
@ -353,7 +353,6 @@ function onConnect() {
|
|||
}, 100);
|
||||
|
||||
helper.interval.add('global_data_refresh', helper.periodicStatusUpdater.run, helper.periodicStatusUpdater.getUpdateInterval(serial.bitrate), false);
|
||||
helper.defaultsDialog.init();
|
||||
}
|
||||
|
||||
function onClosed(result) {
|
||||
|
|
|
@ -52,7 +52,15 @@ var Settings = (function () {
|
|||
input.val(s.value);
|
||||
} else if (s.setting.type == 'float') {
|
||||
input.attr('type', 'number');
|
||||
|
||||
let dataStep = input.data("step");
|
||||
|
||||
if (dataStep !== undefined) {
|
||||
input.attr('step', dataStep);
|
||||
} else {
|
||||
input.attr('step', "0.01");
|
||||
}
|
||||
|
||||
input.attr('min', s.setting.min);
|
||||
input.attr('max', s.setting.max);
|
||||
input.val(s.value.toFixed(2));
|
||||
|
|
16
main.css
|
@ -985,6 +985,14 @@ li.active .ic_mixer {
|
|||
/* Cause the height to shrink to contain its floated contents while log is open */
|
||||
}
|
||||
|
||||
#content.loading {
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
#content.loading > * {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#status-bar {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
|
@ -1015,9 +1023,17 @@ li.active .ic_mixer {
|
|||
}
|
||||
|
||||
.data-loading {
|
||||
z-index: 10000;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('../images/loading-bars.svg') no-repeat center 45%;
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
#content.loading .data-loading {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.data-loading p {
|
||||
|
|
|
@ -185,8 +185,8 @@
|
|||
<li class="tab_mixer">
|
||||
<a href="#" data-i18n="tabMixer" class="tabicon ic_mixer" title="Mixer"></a>
|
||||
</li>
|
||||
<li class="tab_motors">
|
||||
<a href="#" data-i18n="tabMotorTesting" class="tabicon ic_motor" title="Motors"></a>
|
||||
<li class="tab_outputs">
|
||||
<a href="#" data-i18n="tabOutputs" class="tabicon ic_motor" title="Outputs"></a>
|
||||
</li>
|
||||
<li class="tab_profiles">
|
||||
<a href="#" data-i18n="tabPresets" class="tabicon ic_wizzard" title="Presets"></a>
|
||||
|
|
17
main.js
|
@ -91,20 +91,10 @@ $(document).ready(function () {
|
|||
}
|
||||
});
|
||||
|
||||
win.setMinimumSize(1024, 800);
|
||||
win.setMinimumSize(800, 600);
|
||||
|
||||
win.on('close', function () {
|
||||
//Save window size and position
|
||||
// var height = win.height;
|
||||
// var width = win.width;
|
||||
//
|
||||
// if (height < 400) {
|
||||
// height = 400
|
||||
// }
|
||||
// if (width < 512) {
|
||||
// width = 512
|
||||
// }
|
||||
|
||||
chrome.storage.local.set({'windowSize': {height: win.height, width: win.width, x: win.x, y: win.y}}, function () {
|
||||
// Notify that we saved.
|
||||
console.log('Settings saved');
|
||||
|
@ -171,6 +161,7 @@ $(document).ready(function () {
|
|||
|
||||
// detach listeners and remove element data
|
||||
var content = $('#content');
|
||||
content.data('empty', !!content.is(':empty'));
|
||||
content.empty();
|
||||
|
||||
// display loading screen
|
||||
|
@ -238,8 +229,8 @@ $(document).ready(function () {
|
|||
case 'mixer':
|
||||
TABS.mixer.initialize(content_ready);
|
||||
break;
|
||||
case 'motors':
|
||||
TABS.motors.initialize(content_ready);
|
||||
case 'outputs':
|
||||
TABS.outputs.initialize(content_ready);
|
||||
break;
|
||||
case 'osd':
|
||||
TABS.osd.initialize(content_ready);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"minimum_chrome_version": "38",
|
||||
"version": "2.3.2",
|
||||
"version": "2.5.0",
|
||||
"author": "Several",
|
||||
"name": "INAV - Configurator",
|
||||
"short_name": "INAV",
|
||||
|
|
2485
package-lock.json
generated
|
@ -1,11 +1,13 @@
|
|||
{
|
||||
"name": "inav-configurator",
|
||||
"description": "INAV Configurator",
|
||||
"version": "2.3.2",
|
||||
"version": "2.5.0",
|
||||
"main": "main.html",
|
||||
"default_locale": "en",
|
||||
"scripts": {
|
||||
"start": "node node_modules/gulp/bin/gulp.js build && node node_modules/nw/bin/nw ."
|
||||
"start": "node node_modules/gulp/bin/gulp.js build && node node_modules/nw/bin/nw .",
|
||||
"gulp": "gulp",
|
||||
"nw": "nw"
|
||||
},
|
||||
"window": {
|
||||
"title": "INAV Configurator",
|
||||
|
@ -33,7 +35,7 @@
|
|||
"jquery-ui-npm": "1.12.0",
|
||||
"marked": "^0.3.17",
|
||||
"minimist": "^1.2.0",
|
||||
"nw": "^0.39.3-sdk",
|
||||
"nw": "^0.42.2-sdk",
|
||||
"nw-dialog": "^1.0.7",
|
||||
"openlayers": "^4.6.5",
|
||||
"temp": "^0.8.3",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
FONT_VERSION = 1
|
||||
|
||||
FONTS = default vision impact clarity clarity_medium bold large
|
||||
FONTS = default vision impact impact_mini clarity clarity_medium bold large
|
||||
CHARMAPS = $(addsuffix .mcm, $(FONTS))
|
||||
PREVIEWS = $(addsuffix .png, $(FONTS))
|
||||
|
||||
|
|
BIN
resources/osd/bold/140.png
Normal file
After Width: | Height: | Size: 219 B |
BIN
resources/osd/clarity/140.png
Normal file
After Width: | Height: | Size: 219 B |
BIN
resources/osd/clarity_medium/140.png
Normal file
After Width: | Height: | Size: 219 B |
BIN
resources/osd/default/140.png
Normal file
After Width: | Height: | Size: 219 B |
19852
resources/osd/impact.mcm
Before Width: | Height: | Size: 240 B After Width: | Height: | Size: 274 B |
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 255 B |
Before Width: | Height: | Size: 232 B After Width: | Height: | Size: 265 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 267 B |
BIN
resources/osd/impact/024.png
Executable file → Normal file
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 265 B |
BIN
resources/osd/impact/025.png
Executable file → Normal file
Before Width: | Height: | Size: 271 B After Width: | Height: | Size: 292 B |
BIN
resources/osd/impact/026.png
Executable file → Normal file
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 290 B |
BIN
resources/osd/impact/027.png
Executable file → Normal file
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 276 B |
BIN
resources/osd/impact/028.png
Executable file → Normal file
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 242 B |
BIN
resources/osd/impact/029.png
Executable file → Normal file
Before Width: | Height: | Size: 232 B After Width: | Height: | Size: 245 B |
Before Width: | Height: | Size: 461 B After Width: | Height: | Size: 322 B |
BIN
resources/osd/impact/034.png
Executable file → Normal file
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 264 B |
Before Width: | Height: | Size: 206 B After Width: | Height: | Size: 254 B |
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 219 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 217 B |
Before Width: | Height: | Size: 197 B After Width: | Height: | Size: 210 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 264 B |
BIN
resources/osd/impact/097.png
Executable file → Normal file
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 268 B |
Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 270 B |
Before Width: | Height: | Size: 237 B After Width: | Height: | Size: 256 B |
BIN
resources/osd/impact/100.png
Executable file → Normal file
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 259 B |
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 247 B |
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 268 B |
BIN
resources/osd/impact/103.png
Executable file → Normal file
Before Width: | Height: | Size: 246 B After Width: | Height: | Size: 266 B |
Before Width: | Height: | Size: 273 B After Width: | Height: | Size: 268 B |
Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 256 B |
Before Width: | Height: | Size: 252 B After Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 224 B After Width: | Height: | Size: 248 B |
BIN
resources/osd/impact/108.png
Executable file → Normal file
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 267 B |
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 240 B |
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 272 B |
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 260 B |
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 244 B |
Before Width: | Height: | Size: 234 B After Width: | Height: | Size: 262 B |
BIN
resources/osd/impact/122.png
Executable file → Normal file
Before Width: | Height: | Size: 279 B After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 281 B |
Before Width: | Height: | Size: 306 B After Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 273 B |
BIN
resources/osd/impact/140.png
Normal file
After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 230 B After Width: | Height: | Size: 238 B |
BIN
resources/osd/impact/154.png
Executable file → Normal file
Before Width: | Height: | Size: 241 B After Width: | Height: | Size: 236 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 275 B |
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 275 B After Width: | Height: | Size: 279 B |
Before Width: | Height: | Size: 263 B After Width: | Height: | Size: 265 B |
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 235 B |
Before Width: | Height: | Size: 247 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 288 B After Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 276 B After Width: | Height: | Size: 280 B |
Before Width: | Height: | Size: 247 B After Width: | Height: | Size: 257 B |
Before Width: | Height: | Size: 263 B After Width: | Height: | Size: 268 B |
Before Width: | Height: | Size: 263 B After Width: | Height: | Size: 270 B |
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 235 B After Width: | Height: | Size: 244 B |
Before Width: | Height: | Size: 236 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 275 B After Width: | Height: | Size: 252 B |
Before Width: | Height: | Size: 315 B After Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 281 B |
BIN
resources/osd/impact/202-203.png
Executable file → Normal file
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 320 B |
Before Width: | Height: | Size: 208 B After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 237 B After Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 236 B After Width: | Height: | Size: 258 B |
Before Width: | Height: | Size: 236 B After Width: | Height: | Size: 271 B |
Before Width: | Height: | Size: 248 B After Width: | Height: | Size: 375 B |
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 248 B After Width: | Height: | Size: 332 B |
32769
resources/osd/impact_mini.mcm
Normal file
BIN
resources/osd/impact_mini/000.png
Normal file
After Width: | Height: | Size: 153 B |
BIN
resources/osd/impact_mini/001.png
Normal file
After Width: | Height: | Size: 242 B |
BIN
resources/osd/impact_mini/002.png
Normal file
After Width: | Height: | Size: 229 B |
BIN
resources/osd/impact_mini/003.png
Normal file
After Width: | Height: | Size: 230 B |