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. 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
|
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
|
### Mac
|
||||||
|
|
||||||
1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases)
|
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. From project folder run `npm install`
|
||||||
1. To build the JS and CSS files and start the configurator:
|
1. To build the JS and CSS files and start the configurator:
|
||||||
- With NW.js: Run `npm start`.
|
- 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.
|
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:
|
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": {
|
"tabGPS": {
|
||||||
"message": "GPS"
|
"message": "GPS"
|
||||||
},
|
},
|
||||||
"tabMotorTesting": {
|
"tabOutputs": {
|
||||||
"message": "Outputs"
|
"message": "Outputs"
|
||||||
},
|
},
|
||||||
"tabLedStrip": {
|
"tabLedStrip": {
|
||||||
|
@ -505,7 +505,7 @@
|
||||||
"message": "In-flight level calibration"
|
"message": "In-flight level calibration"
|
||||||
},
|
},
|
||||||
"featureMOTOR_STOP": {
|
"featureMOTOR_STOP": {
|
||||||
"message": "Don't spin the motors when armed"
|
"message": "Stop motors on low throttle"
|
||||||
},
|
},
|
||||||
"featureSERVO_TILT": {
|
"featureSERVO_TILT": {
|
||||||
"message": "Servo gimbal"
|
"message": "Servo gimbal"
|
||||||
|
@ -546,8 +546,8 @@
|
||||||
"featureCURRENT_METER": {
|
"featureCURRENT_METER": {
|
||||||
"message": "Battery current monitoring"
|
"message": "Battery current monitoring"
|
||||||
},
|
},
|
||||||
"feature3D": {
|
"featureREVERSIBLE_MOTORS": {
|
||||||
"message": "3D mode (for use with reversible ESCs)"
|
"message": "Reversible motors mode (for use with reversible ESCs)"
|
||||||
},
|
},
|
||||||
"featureRSSI_ADC": {
|
"featureRSSI_ADC": {
|
||||||
"message": "Analog RSSI input"
|
"message": "Analog RSSI input"
|
||||||
|
@ -636,11 +636,17 @@
|
||||||
"configurationEscFeatures": {
|
"configurationEscFeatures": {
|
||||||
"message": "ESC/Motor Features"
|
"message": "ESC/Motor Features"
|
||||||
},
|
},
|
||||||
|
"serialrx_inverted": {
|
||||||
|
"message": "Serial Port Inverted (comparing to protocol default)"
|
||||||
|
},
|
||||||
|
"serialrx_halfduplex" : {
|
||||||
|
"message": "Serial receiver half-duplex"
|
||||||
|
},
|
||||||
"configurationFeaturesHelp": {
|
"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."
|
"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": {
|
"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": {
|
"configurationBoardAlignment": {
|
||||||
"message": "Board and Sensor Alignment"
|
"message": "Board and Sensor Alignment"
|
||||||
|
@ -654,12 +660,6 @@
|
||||||
"configurationBoardAlignmentYaw": {
|
"configurationBoardAlignmentYaw": {
|
||||||
"message": "Yaw Degrees"
|
"message": "Yaw Degrees"
|
||||||
},
|
},
|
||||||
"configurationSensorAlignmentGyro": {
|
|
||||||
"message": "GYRO Alignment"
|
|
||||||
},
|
|
||||||
"configurationSensorAlignmentAcc": {
|
|
||||||
"message": "ACCEL Alignment"
|
|
||||||
},
|
|
||||||
"configurationSensorAlignmentMag": {
|
"configurationSensorAlignmentMag": {
|
||||||
"message": "MAG Alignment"
|
"message": "MAG Alignment"
|
||||||
},
|
},
|
||||||
|
@ -757,19 +757,19 @@
|
||||||
"message": "Battery Capacity Unit"
|
"message": "Battery Capacity Unit"
|
||||||
},
|
},
|
||||||
"configuration3d": {
|
"configuration3d": {
|
||||||
"message": "3D"
|
"message": "Reversible motors"
|
||||||
},
|
},
|
||||||
"configuration3dDeadbandLow": {
|
"configuration3dDeadbandLow": {
|
||||||
"message": "3D Deadband Low"
|
"message": "Reversible Motors Deadband Low"
|
||||||
},
|
},
|
||||||
"configuration3dDeadbandHigh": {
|
"configuration3dDeadbandHigh": {
|
||||||
"message": "3D Deadband High"
|
"message": "Reversible Motors Deadband High"
|
||||||
},
|
},
|
||||||
"configuration3dNeutral": {
|
"configuration3dNeutral": {
|
||||||
"message": "3D Neutral"
|
"message": "Reversible Motors Neutral"
|
||||||
},
|
},
|
||||||
"configuration3dDeadbandThrottle": {
|
"configuration3dDeadbandThrottle": {
|
||||||
"message": "3D Deadband Throttle"
|
"message": "Reversible Motors Deadband Throttle"
|
||||||
},
|
},
|
||||||
"configurationSystem": {
|
"configurationSystem": {
|
||||||
"message": "System configuration"
|
"message": "System configuration"
|
||||||
|
@ -795,6 +795,9 @@
|
||||||
"configurationGPSHelp": {
|
"configurationGPSHelp": {
|
||||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) when using GPS feature."
|
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) when using GPS feature."
|
||||||
},
|
},
|
||||||
|
"receiverType": {
|
||||||
|
"message": "Receiver type"
|
||||||
|
},
|
||||||
"configurationSerialRX": {
|
"configurationSerialRX": {
|
||||||
"message": "Serial Receiver Provider"
|
"message": "Serial Receiver Provider"
|
||||||
},
|
},
|
||||||
|
@ -927,6 +930,9 @@
|
||||||
"portsFunction_FRSKY_OSD": {
|
"portsFunction_FRSKY_OSD": {
|
||||||
"message": "FrSky OSD"
|
"message": "FrSky OSD"
|
||||||
},
|
},
|
||||||
|
"portsFunction_DJI_FPV": {
|
||||||
|
"message": "DJI FPV VTX"
|
||||||
|
},
|
||||||
"pidTuningName": {
|
"pidTuningName": {
|
||||||
"message": "Name"
|
"message": "Name"
|
||||||
},
|
},
|
||||||
|
@ -1940,9 +1946,6 @@
|
||||||
"warning": {
|
"warning": {
|
||||||
"message": "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": {
|
"escProtocol": {
|
||||||
"message": "ESC protocol"
|
"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!"
|
"message" : "Servo has to support refresh rate. Change only if you know that servo supports it. Too high refresh rate might damage servos!"
|
||||||
},
|
},
|
||||||
"logPwmOutputDisabled": {
|
"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": {
|
"configurationGyroSyncTitle": {
|
||||||
"message" : "Synchronize looptime with gyroscope"
|
"message" : "Synchronize looptime with gyroscope"
|
||||||
|
@ -2202,7 +2205,7 @@
|
||||||
"message": "Warning"
|
"message": "Warning"
|
||||||
},
|
},
|
||||||
"presetApplyDescription": {
|
"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": {
|
"OK": {
|
||||||
"message": "OK"
|
"message": "OK"
|
||||||
|
@ -2963,6 +2966,9 @@
|
||||||
"input": {
|
"input": {
|
||||||
"message": "Input"
|
"message": "Input"
|
||||||
},
|
},
|
||||||
|
"fixedValue": {
|
||||||
|
"message": "Fixed Value (µs)"
|
||||||
|
},
|
||||||
"weight": {
|
"weight": {
|
||||||
"message": "Weight (%)"
|
"message": "Weight (%)"
|
||||||
},
|
},
|
||||||
|
@ -3167,11 +3173,47 @@
|
||||||
"gyro_lpf_type_help": {
|
"gyro_lpf_type_help": {
|
||||||
"message": "BIQUAD offers better noise attenuation for a price of higher delay. PT1 has lower attenuation but offers lower delay."
|
"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": {
|
"tabFilteringAdvanced": {
|
||||||
"message": "Other filters"
|
"message": "Other filters"
|
||||||
},
|
},
|
||||||
"mainFilters": {
|
"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": {
|
"acc_lpf_type": {
|
||||||
"message": "Accelerometer LPF type"
|
"message": "Accelerometer LPF type"
|
||||||
|
@ -3238,5 +3280,23 @@
|
||||||
},
|
},
|
||||||
"defaultsDialogInfo": {
|
"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. "
|
"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',
|
'./js/vtx.js',
|
||||||
'./main.js',
|
'./main.js',
|
||||||
'./js/tabs.js',
|
'./js/tabs.js',
|
||||||
|
'./js/preset_definitions.js',
|
||||||
'./tabs/*.js',
|
'./tabs/*.js',
|
||||||
'./js/eventFrequencyAnalyzer.js',
|
'./js/eventFrequencyAnalyzer.js',
|
||||||
'./js/periodicStatusUpdater.js',
|
'./js/periodicStatusUpdater.js',
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
var CONFIGURATOR = {
|
var CONFIGURATOR = {
|
||||||
// all versions are specified and compared using semantic versioning http://semver.org/
|
// all versions are specified and compared using semantic versioning http://semver.org/
|
||||||
'minfirmwareVersionAccepted': '2.2.0',
|
'minfirmwareVersionAccepted': '2.4.0',
|
||||||
'maxFirmwareVersionAccepted': '2.5.0', // COndition is < (lt) so we accept all in 2.2 branch, not 2.3 actualy
|
'maxFirmwareVersionAccepted': '2.6.0', // COndition is < (lt) so we accept all in 2.2 branch, not 2.3 actualy
|
||||||
'connectionValid': false,
|
'connectionValid': false,
|
||||||
'connectionValidCliOnly': false,
|
'connectionValidCliOnly': false,
|
||||||
'cliActive': false,
|
'cliActive': false,
|
||||||
|
|
|
@ -43,6 +43,10 @@ helper.defaultsDialog = (function() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "mc_iterm_relax_type",
|
key: "mc_iterm_relax_type",
|
||||||
|
value: "SETPOINT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "mc_iterm_relax",
|
||||||
value: "RP"
|
value: "RP"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
125
js/fc.js
|
@ -30,7 +30,7 @@ var CONFIG,
|
||||||
ARMING_CONFIG,
|
ARMING_CONFIG,
|
||||||
FC_CONFIG,
|
FC_CONFIG,
|
||||||
MISC,
|
MISC,
|
||||||
_3D,
|
REVERSIBLE_MOTORS,
|
||||||
DATAFLASH,
|
DATAFLASH,
|
||||||
SDCARD,
|
SDCARD,
|
||||||
BLACKBOX,
|
BLACKBOX,
|
||||||
|
@ -415,11 +415,11 @@ var FC = {
|
||||||
emergencyDescentRate: null
|
emergencyDescentRate: null
|
||||||
};
|
};
|
||||||
|
|
||||||
_3D = {
|
REVERSIBLE_MOTORS = {
|
||||||
deadband3d_low: 0,
|
deadband_low: 0,
|
||||||
deadband3d_high: 0,
|
deadband_high: 0,
|
||||||
neutral3d: 0,
|
neutral: 0,
|
||||||
deadband3d_throttle: 0
|
deadband_throttle: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
DATAFLASH = {
|
DATAFLASH = {
|
||||||
|
@ -549,7 +549,7 @@ var FC = {
|
||||||
{bit: 7, group: 'gps', name: 'GPS', haveTip: true},
|
{bit: 7, group: 'gps', name: 'GPS', haveTip: true},
|
||||||
{bit: 10, group: 'other', name: 'TELEMETRY', showNameInTip: true},
|
{bit: 10, group: 'other', name: 'TELEMETRY', showNameInTip: true},
|
||||||
{bit: 11, group: 'batteryCurrent', name: 'CURRENT_METER'},
|
{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: 15, group: 'other', name: 'RSSI_ADC', haveTip: true, showNameInTip: true},
|
||||||
{bit: 16, group: 'other', name: 'LED_STRIP', showNameInTip: true},
|
{bit: 16, group: 'other', name: 'LED_STRIP', showNameInTip: true},
|
||||||
{bit: 17, group: 'other', name: 'DASHBOARD', 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: 30, group: 'other', name: 'FW_LAUNCH', haveTip: false, showNameInTip: false},
|
||||||
{bit: 2, group: 'other', name: 'TX_PROF_SEL', 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: 0, group: 'other', name: 'THR_VBAT_COMP', haveTip: true, showNameInTip: true},
|
||||||
{bit: 3, group: 'other', name: 'BAT_PROFILE_AUTOSWITCH', 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}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
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();
|
return features.reverse();
|
||||||
},
|
},
|
||||||
isFeatureEnabled: function (featureName, features) {
|
isFeatureEnabled: function (featureName, features) {
|
||||||
|
@ -695,94 +698,6 @@ var FC = {
|
||||||
'Disabled'
|
'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 () {
|
getSensorAlignments: function () {
|
||||||
return [
|
return [
|
||||||
'CW 0°',
|
'CW 0°',
|
||||||
|
@ -1077,7 +992,7 @@ var FC = {
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
getServoMixInputName: function (input) {
|
getServoMixInputName: function (input) {
|
||||||
return getServoMixInputNames()[input];
|
return this.getServoMixInputNames()[input];
|
||||||
},
|
},
|
||||||
getModeId: function (name) {
|
getModeId: function (name) {
|
||||||
for (var i = 0; i < AUX_CONFIG.length; i++) {
|
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);
|
return bit_check(CONFIG.mode[Math.trunc(i / 32)], i % 32);
|
||||||
},
|
},
|
||||||
isModeEnabled: function (name) {
|
isModeEnabled: function (name) {
|
||||||
return FC.isModeBitSet(FC.getModeId(name));
|
return this.isModeBitSet(this.getModeId(name));
|
||||||
},
|
},
|
||||||
getLogicOperators: function () {
|
getLogicOperators: function () {
|
||||||
return {
|
return {
|
||||||
|
@ -1176,7 +1091,7 @@ var FC = {
|
||||||
0: "ARM timer [s]",
|
0: "ARM timer [s]",
|
||||||
1: "Home distance [m]",
|
1: "Home distance [m]",
|
||||||
2: "Trip distance [m]",
|
2: "Trip distance [m]",
|
||||||
3: "RSSI",
|
3: "RSSI",
|
||||||
4: "Vbat [deci-Volt] [1V = 10]",
|
4: "Vbat [deci-Volt] [1V = 10]",
|
||||||
5: "Cell voltage [deci-Volt] [1V = 10]",
|
5: "Cell voltage [deci-Volt] [1V = 10]",
|
||||||
6: "Current [centi-Amp] [1A = 100]",
|
6: "Current [centi-Amp] [1A = 100]",
|
||||||
|
@ -1190,7 +1105,15 @@ var FC = {
|
||||||
14: "Throttle position [%]",
|
14: "Throttle position [%]",
|
||||||
15: "Roll [deg]",
|
15: "Roll [deg]",
|
||||||
16: "Pitch [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: {
|
3: {
|
||||||
|
|
22
js/gui.js
|
@ -28,7 +28,7 @@ var GUI_control = function () {
|
||||||
'logging',
|
'logging',
|
||||||
'onboard_logging',
|
'onboard_logging',
|
||||||
'modes',
|
'modes',
|
||||||
'motors',
|
'outputs',
|
||||||
'pid_tuning',
|
'pid_tuning',
|
||||||
'ports',
|
'ports',
|
||||||
'receiver',
|
'receiver',
|
||||||
|
@ -128,7 +128,7 @@ GUI_control.prototype.switchery = function() {
|
||||||
|
|
||||||
|
|
||||||
GUI_control.prototype.content_ready = function (callback) {
|
GUI_control.prototype.content_ready = function (callback) {
|
||||||
|
const content = $('#content').removeClass('loading');
|
||||||
$('.togglesmall').each(function(index, elem) {
|
$('.togglesmall').each(function(index, elem) {
|
||||||
var switchery = new Switchery(elem, {
|
var switchery = new Switchery(elem, {
|
||||||
size: 'small',
|
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() {
|
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
|
// initialize object into GUI variable
|
||||||
var GUI = new GUI_control();
|
var GUI = new GUI_control();
|
||||||
|
|
|
@ -101,4 +101,15 @@ DataView.prototype.readString = function() {
|
||||||
s += String.fromCharCode(c);
|
s += String.fromCharCode(c);
|
||||||
}
|
}
|
||||||
return s;
|
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() {
|
$('[data-i18n]:not(.i18n-replaced)').each(function() {
|
||||||
var element = $(this);
|
var element = $(this);
|
||||||
|
|
||||||
element.html(translate(element.data('i18n')));
|
const translated = translate(element.data('i18n'));
|
||||||
|
element.html(translated);
|
||||||
element.addClass('i18n-replaced');
|
element.addClass('i18n-replaced');
|
||||||
|
if (element.attr("title") !== "") {
|
||||||
|
element.attr("title", translated);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
|
$('[i18n_title]:not(.i18n_title-replaced)').each(function() {
|
||||||
|
@ -52,4 +56,4 @@ function localize() {
|
||||||
});
|
});
|
||||||
|
|
||||||
return localized;
|
return localized;
|
||||||
}
|
}
|
||||||
|
|
54
js/model.js
|
@ -517,7 +517,53 @@ const mixerList = [
|
||||||
new ServoMixRule(3, INPUT_STABILIZED_YAW, 50, 0),
|
new ServoMixRule(3, INPUT_STABILIZED_YAW, 50, 0),
|
||||||
new ServoMixRule(4, 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),
|
||||||
|
]
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const platformList = [
|
const platformList = [
|
||||||
|
@ -548,19 +594,19 @@ const platformList = [
|
||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
name: "Rover",
|
name: "Rover",
|
||||||
enabled: false,
|
enabled: true,
|
||||||
flapsPossible: false
|
flapsPossible: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 5,
|
id: 5,
|
||||||
name: "Boat",
|
name: "Boat",
|
||||||
enabled: false,
|
enabled: true,
|
||||||
flapsPossible: false
|
flapsPossible: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 6,
|
id: 6,
|
||||||
name: "Other",
|
name: "Other",
|
||||||
enabled: false,
|
enabled: true,
|
||||||
flapsPossible: false
|
flapsPossible: false
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -52,6 +52,7 @@ var mspHelper = (function (gui) {
|
||||||
'ESC': 18,
|
'ESC': 18,
|
||||||
'GSM_SMS': 19,
|
'GSM_SMS': 19,
|
||||||
'FRSKY_OSD': 20,
|
'FRSKY_OSD': 20,
|
||||||
|
'DJI_FPV': 21,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Required for MSP_DEBUGMSG because console.log() doesn't allow omitting
|
// 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');
|
BATTERY_CONFIG.battery_capacity_unit = (data.getUint8(offset++) ? 'mWh' : 'mAh');
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_3D:
|
case MSPCodes.MSP_3D:
|
||||||
_3D.deadband3d_low = data.getUint16(offset, true);
|
REVERSIBLE_MOTORS.deadband_low = data.getUint16(offset, true);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
_3D.deadband3d_high = data.getUint16(offset, true);
|
REVERSIBLE_MOTORS.deadband_high = data.getUint16(offset, true);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
_3D.neutral3d = data.getUint16(offset, true);
|
REVERSIBLE_MOTORS.neutral = data.getUint16(offset, true);
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
||||||
offset += 2;
|
offset += 2;
|
||||||
_3D.deadband3d_throttle = data.getUint16(offset, true);
|
REVERSIBLE_MOTORS.deadband_throttle = data.getUint16(offset, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_MOTOR_PINS:
|
case MSPCodes.MSP_MOTOR_PINS:
|
||||||
|
@ -586,7 +587,7 @@ var mspHelper = (function (gui) {
|
||||||
RC_deadband.yaw_deadband = data.getUint8(offset++);
|
RC_deadband.yaw_deadband = data.getUint8(offset++);
|
||||||
RC_deadband.alt_hold_deadband = data.getUint8(offset++);
|
RC_deadband.alt_hold_deadband = data.getUint8(offset++);
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
||||||
_3D.deadband3d_throttle = data.getUint16(offset, true);
|
REVERSIBLE_MOTORS.deadband_throttle = data.getUint16(offset, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_SENSOR_ALIGNMENT:
|
case MSPCodes.MSP_SENSOR_ALIGNMENT:
|
||||||
|
@ -1494,7 +1495,10 @@ var mspHelper = (function (gui) {
|
||||||
dataHandler.callbacks.splice(i, 1);
|
dataHandler.callbacks.splice(i, 1);
|
||||||
|
|
||||||
// fire callback
|
// 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;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_3D:
|
case MSPCodes.MSP_SET_3D:
|
||||||
buffer.push(lowByte(_3D.deadband3d_low));
|
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_low));
|
||||||
buffer.push(highByte(_3D.deadband3d_low));
|
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_low));
|
||||||
buffer.push(lowByte(_3D.deadband3d_high));
|
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_high));
|
||||||
buffer.push(highByte(_3D.deadband3d_high));
|
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_high));
|
||||||
buffer.push(lowByte(_3D.neutral3d));
|
buffer.push(lowByte(REVERSIBLE_MOTORS.neutral));
|
||||||
buffer.push(highByte(_3D.neutral3d));
|
buffer.push(highByte(REVERSIBLE_MOTORS.neutral));
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
if (semver.lt(CONFIG.apiVersion, "1.17.0")) {
|
||||||
buffer.push(lowByte(_3D.deadband3d_throttle));
|
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||||
buffer.push(highByte(_3D.deadband3d_throttle));
|
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1816,8 +1820,8 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(RC_deadband.yaw_deadband);
|
buffer.push(RC_deadband.yaw_deadband);
|
||||||
buffer.push(RC_deadband.alt_hold_deadband);
|
buffer.push(RC_deadband.alt_hold_deadband);
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
if (semver.gte(CONFIG.apiVersion, "1.24.0")) {
|
||||||
buffer.push(lowByte(_3D.deadband3d_throttle));
|
buffer.push(lowByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||||
buffer.push(highByte(_3D.deadband3d_throttle));
|
buffer.push(highByte(REVERSIBLE_MOTORS.deadband_throttle));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
1408
js/preset_definitions.js
Normal file
|
@ -353,7 +353,6 @@ function onConnect() {
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
helper.interval.add('global_data_refresh', helper.periodicStatusUpdater.run, helper.periodicStatusUpdater.getUpdateInterval(serial.bitrate), false);
|
helper.interval.add('global_data_refresh', helper.periodicStatusUpdater.run, helper.periodicStatusUpdater.getUpdateInterval(serial.bitrate), false);
|
||||||
helper.defaultsDialog.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onClosed(result) {
|
function onClosed(result) {
|
||||||
|
|
|
@ -52,7 +52,15 @@ var Settings = (function () {
|
||||||
input.val(s.value);
|
input.val(s.value);
|
||||||
} else if (s.setting.type == 'float') {
|
} else if (s.setting.type == 'float') {
|
||||||
input.attr('type', 'number');
|
input.attr('type', 'number');
|
||||||
input.attr('step', "0.01");
|
|
||||||
|
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('min', s.setting.min);
|
||||||
input.attr('max', s.setting.max);
|
input.attr('max', s.setting.max);
|
||||||
input.val(s.value.toFixed(2));
|
input.val(s.value.toFixed(2));
|
||||||
|
|
18
main.css
|
@ -985,6 +985,14 @@ li.active .ic_mixer {
|
||||||
/* Cause the height to shrink to contain its floated contents while log is open */
|
/* 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 {
|
#status-bar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
@ -1015,9 +1023,17 @@ li.active .ic_mixer {
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-loading {
|
.data-loading {
|
||||||
|
z-index: 10000;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: url('../images/loading-bars.svg') no-repeat center 45%;
|
background: url('../images/loading-bars.svg') no-repeat center 45%;
|
||||||
|
background-color: #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content.loading .data-loading {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-loading p {
|
.data-loading p {
|
||||||
|
@ -2131,4 +2147,4 @@ select {
|
||||||
|
|
||||||
.subtab__content--current {
|
.subtab__content--current {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,8 +185,8 @@
|
||||||
<li class="tab_mixer">
|
<li class="tab_mixer">
|
||||||
<a href="#" data-i18n="tabMixer" class="tabicon ic_mixer" title="Mixer"></a>
|
<a href="#" data-i18n="tabMixer" class="tabicon ic_mixer" title="Mixer"></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="tab_motors">
|
<li class="tab_outputs">
|
||||||
<a href="#" data-i18n="tabMotorTesting" class="tabicon ic_motor" title="Motors"></a>
|
<a href="#" data-i18n="tabOutputs" class="tabicon ic_motor" title="Outputs"></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="tab_profiles">
|
<li class="tab_profiles">
|
||||||
<a href="#" data-i18n="tabPresets" class="tabicon ic_wizzard" title="Presets"></a>
|
<a href="#" data-i18n="tabPresets" class="tabicon ic_wizzard" title="Presets"></a>
|
||||||
|
@ -302,4 +302,4 @@
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
17
main.js
|
@ -91,20 +91,10 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
win.setMinimumSize(1024, 800);
|
win.setMinimumSize(800, 600);
|
||||||
|
|
||||||
win.on('close', function () {
|
win.on('close', function () {
|
||||||
//Save window size and position
|
//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 () {
|
chrome.storage.local.set({'windowSize': {height: win.height, width: win.width, x: win.x, y: win.y}}, function () {
|
||||||
// Notify that we saved.
|
// Notify that we saved.
|
||||||
console.log('Settings saved');
|
console.log('Settings saved');
|
||||||
|
@ -171,6 +161,7 @@ $(document).ready(function () {
|
||||||
|
|
||||||
// detach listeners and remove element data
|
// detach listeners and remove element data
|
||||||
var content = $('#content');
|
var content = $('#content');
|
||||||
|
content.data('empty', !!content.is(':empty'));
|
||||||
content.empty();
|
content.empty();
|
||||||
|
|
||||||
// display loading screen
|
// display loading screen
|
||||||
|
@ -238,8 +229,8 @@ $(document).ready(function () {
|
||||||
case 'mixer':
|
case 'mixer':
|
||||||
TABS.mixer.initialize(content_ready);
|
TABS.mixer.initialize(content_ready);
|
||||||
break;
|
break;
|
||||||
case 'motors':
|
case 'outputs':
|
||||||
TABS.motors.initialize(content_ready);
|
TABS.outputs.initialize(content_ready);
|
||||||
break;
|
break;
|
||||||
case 'osd':
|
case 'osd':
|
||||||
TABS.osd.initialize(content_ready);
|
TABS.osd.initialize(content_ready);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"minimum_chrome_version": "38",
|
"minimum_chrome_version": "38",
|
||||||
"version": "2.3.2",
|
"version": "2.5.0",
|
||||||
"author": "Several",
|
"author": "Several",
|
||||||
"name": "INAV - Configurator",
|
"name": "INAV - Configurator",
|
||||||
"short_name": "INAV",
|
"short_name": "INAV",
|
||||||
|
|
2485
package-lock.json
generated
|
@ -1,11 +1,13 @@
|
||||||
{
|
{
|
||||||
"name": "inav-configurator",
|
"name": "inav-configurator",
|
||||||
"description": "INAV Configurator",
|
"description": "INAV Configurator",
|
||||||
"version": "2.3.2",
|
"version": "2.5.0",
|
||||||
"main": "main.html",
|
"main": "main.html",
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
"scripts": {
|
"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": {
|
"window": {
|
||||||
"title": "INAV Configurator",
|
"title": "INAV Configurator",
|
||||||
|
@ -33,7 +35,7 @@
|
||||||
"jquery-ui-npm": "1.12.0",
|
"jquery-ui-npm": "1.12.0",
|
||||||
"marked": "^0.3.17",
|
"marked": "^0.3.17",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"nw": "^0.39.3-sdk",
|
"nw": "^0.42.2-sdk",
|
||||||
"nw-dialog": "^1.0.7",
|
"nw-dialog": "^1.0.7",
|
||||||
"openlayers": "^4.6.5",
|
"openlayers": "^4.6.5",
|
||||||
"temp": "^0.8.3",
|
"temp": "^0.8.3",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
FONT_VERSION = 1
|
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))
|
CHARMAPS = $(addsuffix .mcm, $(FONTS))
|
||||||
PREVIEWS = $(addsuffix .png, $(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 |