mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-13 19:40:22 +03:00
Merge branch 'master' into MrD-Highlight-parameters-that-change-with-profiles-or-battery-profiles
This commit is contained in:
commit
c07b81ed45
32 changed files with 341 additions and 1080 deletions
48
README.md
48
README.md
|
@ -6,6 +6,18 @@ It runs as an app within Google Chrome and allows you to configure the INAV soft
|
||||||
|
|
||||||
Various types of aircraft are supported by the tool and by INAV, e.g. quadcopters, hexacopters, octocopters and fixed-wing aircraft.
|
Various types of aircraft are supported by the tool and by INAV, e.g. quadcopters, hexacopters, octocopters and fixed-wing aircraft.
|
||||||
|
|
||||||
|
# Support
|
||||||
|
|
||||||
|
INAV Configurator comes `as is`, without any warranty and support from authors. If you found a bug, please create an issue on [GitHub](https://github.com/iNavFlight/inav-configurator/issues).
|
||||||
|
|
||||||
|
GitHub issue tracker is reserved for bugs and other technical problems. If you do not know how to setup
|
||||||
|
everything, hardware is not working or have any other _support_ problem, please consult:
|
||||||
|
|
||||||
|
* [INAV Discord Server](https://discord.gg/peg2hhbYwN)
|
||||||
|
* [INAV Official on Facebook](https://www.facebook.com/groups/INAVOfficial)
|
||||||
|
* [RC Groups Support](https://www.rcgroups.com/forums/showthread.php?2495732-Cleanflight-iNav-(navigation-rewrite)-project)
|
||||||
|
* [INAV Official on Telegram](https://t.me/INAVFlight)
|
||||||
|
|
||||||
## INAV Configurator start minimized, what should I do?
|
## INAV Configurator start minimized, what should I do?
|
||||||
|
|
||||||
You have to remove `C:\Users%Your_UserNname%\AppData\Local\inav-configurator` folder and all its content.
|
You have to remove `C:\Users%Your_UserNname%\AppData\Local\inav-configurator` folder and all its content.
|
||||||
|
@ -42,11 +54,7 @@ Depending on target operating system, _INAV Configurator_ is distributed as _sta
|
||||||
1. Run INAV Configurator
|
1. Run INAV Configurator
|
||||||
1. Configurator is not signed, so you have to allow Mac to run untrusted application. There might be a monit for it during first run
|
1. Configurator is not signed, so you have to allow Mac to run untrusted application. There might be a monit for it during first run
|
||||||
|
|
||||||
### ChromeOS
|
## Building and running INAV Configurator locally (for development or Linux users)
|
||||||
|
|
||||||
**INAV Configurator** form ChromeOS is available in [Chrome Web Store](https://chrome.google.com/webstore/detail/inav-configurator/fmaidjmgkdkpafmbnmigkpdnpdhopgel)
|
|
||||||
|
|
||||||
### Building and running INAV Configurator locally (for development or Linux users)
|
|
||||||
|
|
||||||
For local development, **node.js** build system is used.
|
For local development, **node.js** build system is used.
|
||||||
|
|
||||||
|
@ -68,7 +76,13 @@ in the `./dist/` directory.
|
||||||
directory. Running this task on macOS or Linux requires Wine, since it's needed to set the icon
|
directory. Running this task on macOS or Linux requires Wine, since it's needed to set the icon
|
||||||
for the Windows app. If you don't have Wine installed you can create a release by running the **release-only-linux** task.
|
for the Windows app. If you don't have Wine installed you can create a release by running the **release-only-linux** task.
|
||||||
|
|
||||||
To build a specific release, use the command `release --platform="win64"` for example.
|
To build a specific release, use the command `release --platform="win64"` for example.
|
||||||
|
|
||||||
|
### Running with debug | Inspector
|
||||||
|
|
||||||
|
To be able to open Inspector, you will need SDK flavours of NW.js
|
||||||
|
|
||||||
|
`npm install nw@0.61.0 --nwjs_build_type=sdk`
|
||||||
|
|
||||||
## Different map providers
|
## Different map providers
|
||||||
|
|
||||||
|
@ -103,15 +117,6 @@ INAV Configurator is shipped **WITHOUT** API key for Bing Maps. That means: ever
|
||||||
1. Enter MapProxy service layer (inav_layer if configured from MAPPROXY.md)
|
1. Enter MapProxy service layer (inav_layer if configured from MAPPROXY.md)
|
||||||
1. Once completed, you can zoom in on area you will be flying in while connected to the internet in either GPS or Mission Control tab to save the cache for offline use
|
1. Once completed, you can zoom in on area you will be flying in while connected to the internet in either GPS or Mission Control tab to save the cache for offline use
|
||||||
|
|
||||||
## Authors
|
|
||||||
|
|
||||||
Konstantin Sharlaimov/DigitalEntity - maintainer of the INAV firmware and configurator.
|
|
||||||
|
|
||||||
INAV Configurator was originally a [fork](#credits) of Cleanflight Configurator with support for INAV instead of Cleanflight.
|
|
||||||
|
|
||||||
This configurator is the only configurator with support for INAV specific features. It will likely require that you run the latest firmware on the flight controller.
|
|
||||||
If you are experiencing any problems please make sure you are running the [latest firmware version](https://github.com/iNavFlight/inav/releases).
|
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
### WebGL
|
### WebGL
|
||||||
|
@ -123,14 +128,6 @@ Make sure Settings -> System -> "User hardware acceleration when available" is c
|
||||||
1. Dont forget to add your user into dialout group "sudo usermod -aG dialout YOUR_USERNAME" for serial access
|
1. Dont forget to add your user into dialout group "sudo usermod -aG dialout YOUR_USERNAME" for serial access
|
||||||
2. If you have 3D model animation problems, enable "Override software rendering list" in Chrome flags chrome://flags/#ignore-gpu-blacklist
|
2. If you have 3D model animation problems, enable "Override software rendering list" in Chrome flags chrome://flags/#ignore-gpu-blacklist
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
GitHub issue tracker is reserved for bugs and other technical problems. If you do not know how to setup
|
|
||||||
everything, hardware is not working or have any other _support_ problem, please consult:
|
|
||||||
|
|
||||||
* [rcgroups main thread](https://www.rcgroups.com/forums/showthread.php?2495732-Cleanflight-iNav-(navigation-rewrite)-project)
|
|
||||||
* [Telegram Group](https://t.me/INAVFlight)
|
|
||||||
|
|
||||||
## Issue trackers
|
## Issue trackers
|
||||||
|
|
||||||
For INAV configurator issues raise them here
|
For INAV configurator issues raise them here
|
||||||
|
@ -144,8 +141,3 @@ https://github.com/iNavFlight/inav/issues
|
||||||
## Developers
|
## Developers
|
||||||
|
|
||||||
We accept clean and reasonable patches, submit them!
|
We accept clean and reasonable patches, submit them!
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
ctn - primary author and maintainer of Baseflight Configurator.
|
|
||||||
Hydra - author and maintainer of Cleanflight Configurator from which this project was forked.
|
|
||||||
|
|
|
@ -112,9 +112,6 @@
|
||||||
"tabFailsafe": {
|
"tabFailsafe": {
|
||||||
"message": "Failsafe"
|
"message": "Failsafe"
|
||||||
},
|
},
|
||||||
"tabTransponder": {
|
|
||||||
"message": "Race Transponder"
|
|
||||||
},
|
|
||||||
"tabGPS": {
|
"tabGPS": {
|
||||||
"message": "GPS"
|
"message": "GPS"
|
||||||
},
|
},
|
||||||
|
@ -681,12 +678,6 @@
|
||||||
"featureCHANNEL_FORWARDING": {
|
"featureCHANNEL_FORWARDING": {
|
||||||
"message": "Forward aux channels to servo outputs"
|
"message": "Forward aux channels to servo outputs"
|
||||||
},
|
},
|
||||||
"featureTRANSPONDER": {
|
|
||||||
"message": "Race Transponder"
|
|
||||||
},
|
|
||||||
"featureTRANSPONDERTip": {
|
|
||||||
"message": "Configure via the Race Transponder tab after enabling."
|
|
||||||
},
|
|
||||||
"featureSOFTSPI": {
|
"featureSOFTSPI": {
|
||||||
"message": "CPU based SPI"
|
"message": "CPU based SPI"
|
||||||
},
|
},
|
||||||
|
@ -1710,33 +1701,6 @@
|
||||||
"programmingEepromSaved": {
|
"programmingEepromSaved": {
|
||||||
"message": "EEPROM <span style=\"color: #37a8db\">saved</span>: Programming"
|
"message": "EEPROM <span style=\"color: #37a8db\">saved</span>: Programming"
|
||||||
},
|
},
|
||||||
"transponderNotSupported": {
|
|
||||||
"message": "Your flight controller's firmware does not support transponder functionality."
|
|
||||||
},
|
|
||||||
"transponderHelp": {
|
|
||||||
"message": "Configure your transponder code here. Note: Only valid codes will be recognised by race timing systems. Valid transponder codes can be obtained from <a href=\"http://seriouslypro.com/transponder-codes\" target=\"_blank\">Seriously Pro</a>."
|
|
||||||
},
|
|
||||||
"transponderInformation": {
|
|
||||||
"message": "Transponders systems allow race organizers to time your laps. The transponder is fitted to your aircraft and when your aircraft passes the timing gate the track-side receiver registers your code and records your laptime. When fitting an IR based transponder your should ensure that it points outward from your aircraft towards the track-side receivers and that the light beam is not obstructed by your airframe, battery-straps, cables, propellers, etc."
|
|
||||||
},
|
|
||||||
"transponderConfiguration": {
|
|
||||||
"message": "Configuration"
|
|
||||||
},
|
|
||||||
"transponderData": {
|
|
||||||
"message": "Data"
|
|
||||||
},
|
|
||||||
"transponderDataHelp": {
|
|
||||||
"message": "Hexadecimal digits only, 0-9, A-F"
|
|
||||||
},
|
|
||||||
"transponderButtonSave": {
|
|
||||||
"message": "Save"
|
|
||||||
},
|
|
||||||
"transponderDataInvalid": {
|
|
||||||
"message": "Transponder data is <span style=\"color: red\">invalid</span>"
|
|
||||||
},
|
|
||||||
"transponderEepromSaved": {
|
|
||||||
"message": "EEPROM <span style=\"color: #37a8db\">saved</span>: Transponder"
|
|
||||||
},
|
|
||||||
"servosChangeDirection": {
|
"servosChangeDirection": {
|
||||||
"message": "Change Direction in TX To Match"
|
"message": "Change Direction in TX To Match"
|
||||||
},
|
},
|
||||||
|
|
295
js/fc.js
295
js/fc.js
|
@ -38,7 +38,6 @@ var CONFIG,
|
||||||
DATAFLASH,
|
DATAFLASH,
|
||||||
SDCARD,
|
SDCARD,
|
||||||
BLACKBOX,
|
BLACKBOX,
|
||||||
TRANSPONDER,
|
|
||||||
RC_deadband,
|
RC_deadband,
|
||||||
SENSOR_ALIGNMENT,
|
SENSOR_ALIGNMENT,
|
||||||
RX_CONFIG,
|
RX_CONFIG,
|
||||||
|
@ -77,14 +76,11 @@ var FC = {
|
||||||
return (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER);
|
return (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER);
|
||||||
},
|
},
|
||||||
isRpyFfComponentUsed: function () {
|
isRpyFfComponentUsed: function () {
|
||||||
return (MIXER_CONFIG.platformType == PLATFORM_AIRPLANE || MIXER_CONFIG.platformType == PLATFORM_ROVER || MIXER_CONFIG.platformType == PLATFORM_BOAT) || ((MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER) && semver.gte(CONFIG.flightControllerVersion, "2.6.0"));
|
return true; // Currently all planes have roll, pitch and yaw FF
|
||||||
},
|
},
|
||||||
isRpyDComponentUsed: function () {
|
isRpyDComponentUsed: function () {
|
||||||
return true; // Currently all platforms use D term
|
return true; // Currently all platforms use D term
|
||||||
},
|
},
|
||||||
isCdComponentUsed: function () {
|
|
||||||
return (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER);
|
|
||||||
},
|
|
||||||
resetState: function () {
|
resetState: function () {
|
||||||
SENSOR_STATUS = {
|
SENSOR_STATUS = {
|
||||||
isHardwareHealthy: 0,
|
isHardwareHealthy: 0,
|
||||||
|
@ -252,23 +248,6 @@ var FC = {
|
||||||
packetCount: 0
|
packetCount: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
/* MISSION_PLANNER = {
|
|
||||||
maxWaypoints: 0,
|
|
||||||
isValidMission: 0,
|
|
||||||
countBusyPoints: 0,
|
|
||||||
bufferPoint: {
|
|
||||||
number: 0,
|
|
||||||
action: 0,
|
|
||||||
lat: 0,
|
|
||||||
lon: 0,
|
|
||||||
alt: 0,
|
|
||||||
endMission: 0,
|
|
||||||
p1: 0,
|
|
||||||
p2: 0,
|
|
||||||
p3: 0
|
|
||||||
}
|
|
||||||
}; */
|
|
||||||
|
|
||||||
MISSION_PLANNER = new WaypointCollection();
|
MISSION_PLANNER = new WaypointCollection();
|
||||||
|
|
||||||
ANALOG = {
|
ANALOG = {
|
||||||
|
@ -479,11 +458,6 @@ var FC = {
|
||||||
blackboxRateDenom: 1
|
blackboxRateDenom: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
TRANSPONDER = {
|
|
||||||
supported: false,
|
|
||||||
data: []
|
|
||||||
};
|
|
||||||
|
|
||||||
RC_deadband = {
|
RC_deadband = {
|
||||||
deadband: 0,
|
deadband: 0,
|
||||||
yaw_deadband: 0,
|
yaw_deadband: 0,
|
||||||
|
@ -601,10 +575,6 @@ var FC = {
|
||||||
{bit: 31, group: 'other', name: "FW_AUTOTRIM", haveTip: true, showNameInTip: true}
|
{bit: 31, group: 'other', name: "FW_AUTOTRIM", 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) {
|
||||||
|
@ -664,168 +634,69 @@ var FC = {
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
getEscProtocols: function () {
|
getEscProtocols: function () {
|
||||||
|
return {
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
|
0: {
|
||||||
return {
|
name: "STANDARD",
|
||||||
0: {
|
message: null,
|
||||||
name: "STANDARD",
|
defaultRate: 400,
|
||||||
message: null,
|
rates: {
|
||||||
defaultRate: 400,
|
50: "50Hz",
|
||||||
rates: {
|
400: "400Hz"
|
||||||
50: "50Hz",
|
|
||||||
400: "400Hz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
1: {
|
|
||||||
name: "ONESHOT125",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 1000,
|
|
||||||
rates: {
|
|
||||||
1000: "1kHz",
|
|
||||||
2000: "2kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
2: {
|
|
||||||
name: "MULTISHOT",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 2000,
|
|
||||||
rates: {
|
|
||||||
1000: "1kHz",
|
|
||||||
2000: "2kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
3: {
|
|
||||||
name: "BRUSHED",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 8000,
|
|
||||||
rates: {
|
|
||||||
8000: "8kHz",
|
|
||||||
16000: "16kHz",
|
|
||||||
32000: "32kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
4: {
|
|
||||||
name: "DSHOT150",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 4000,
|
|
||||||
rates: {
|
|
||||||
4000: "4kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
5: {
|
|
||||||
name: "DSHOT300",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 8000,
|
|
||||||
rates: {
|
|
||||||
8000: "8kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
6: {
|
|
||||||
name: "DSHOT600",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 16000,
|
|
||||||
rates: {
|
|
||||||
16000: "16kHz"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
},
|
||||||
} else {
|
1: {
|
||||||
return {
|
name: "ONESHOT125",
|
||||||
0: {
|
message: null,
|
||||||
name: "STANDARD",
|
defaultRate: 1000,
|
||||||
message: null,
|
rates: {
|
||||||
defaultRate: 400,
|
1000: "1kHz",
|
||||||
rates: {
|
2000: "2kHz"
|
||||||
50: "50Hz",
|
|
||||||
400: "400Hz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
1: {
|
|
||||||
name: "ONESHOT125",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 1000,
|
|
||||||
rates: {
|
|
||||||
400: "400Hz",
|
|
||||||
1000: "1kHz",
|
|
||||||
2000: "2kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
2: {
|
|
||||||
name: "ONESHOT42",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 2000,
|
|
||||||
rates: {
|
|
||||||
400: "400Hz",
|
|
||||||
1000: "1kHz",
|
|
||||||
2000: "2kHz",
|
|
||||||
4000: "4kHz",
|
|
||||||
8000: "8kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
3: {
|
|
||||||
name: "MULTISHOT",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 2000,
|
|
||||||
rates: {
|
|
||||||
400: "400Hz",
|
|
||||||
1000: "1kHz",
|
|
||||||
2000: "2kHz",
|
|
||||||
4000: "4kHz",
|
|
||||||
8000: "8kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
4: {
|
|
||||||
name: "BRUSHED",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 8000,
|
|
||||||
rates: {
|
|
||||||
8000: "8kHz",
|
|
||||||
16000: "16kHz",
|
|
||||||
32000: "32kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
5: {
|
|
||||||
name: "DSHOT150",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 4000,
|
|
||||||
rates: {
|
|
||||||
4000: "4kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
6: {
|
|
||||||
name: "DSHOT300",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 8000,
|
|
||||||
rates: {
|
|
||||||
8000: "8kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
7: {
|
|
||||||
name: "DSHOT600",
|
|
||||||
message: null,
|
|
||||||
defaultRate: 16000,
|
|
||||||
rates: {
|
|
||||||
16000: "16kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
8: {
|
|
||||||
name: "DSHOT1200",
|
|
||||||
message: "escProtocolNotAdvised",
|
|
||||||
defaultRate: 16000,
|
|
||||||
rates: {
|
|
||||||
16000: "16kHz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
9: {
|
|
||||||
name: "SERIALSHOT",
|
|
||||||
message: "escProtocolExperimental",
|
|
||||||
defaultRate: 4000,
|
|
||||||
rates: {
|
|
||||||
4000: "4kHz"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
},
|
||||||
}
|
2: {
|
||||||
|
name: "MULTISHOT",
|
||||||
|
message: null,
|
||||||
|
defaultRate: 2000,
|
||||||
|
rates: {
|
||||||
|
1000: "1kHz",
|
||||||
|
2000: "2kHz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
3: {
|
||||||
|
name: "BRUSHED",
|
||||||
|
message: null,
|
||||||
|
defaultRate: 8000,
|
||||||
|
rates: {
|
||||||
|
8000: "8kHz",
|
||||||
|
16000: "16kHz",
|
||||||
|
32000: "32kHz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
4: {
|
||||||
|
name: "DSHOT150",
|
||||||
|
message: null,
|
||||||
|
defaultRate: 4000,
|
||||||
|
rates: {
|
||||||
|
4000: "4kHz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
5: {
|
||||||
|
name: "DSHOT300",
|
||||||
|
message: null,
|
||||||
|
defaultRate: 8000,
|
||||||
|
rates: {
|
||||||
|
8000: "8kHz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
6: {
|
||||||
|
name: "DSHOT600",
|
||||||
|
message: null,
|
||||||
|
defaultRate: 16000,
|
||||||
|
rates: {
|
||||||
|
16000: "16kHz"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
},
|
},
|
||||||
getServoRates: function () {
|
getServoRates: function () {
|
||||||
return {
|
return {
|
||||||
|
@ -866,37 +737,6 @@ var FC = {
|
||||||
getOsdDisabledFields: function () {
|
getOsdDisabledFields: function () {
|
||||||
return [];
|
return [];
|
||||||
},
|
},
|
||||||
getAccelerometerNames: function () {
|
|
||||||
return [ "NONE", "AUTO", "MPU6050", "LSM303DLHC", "MPU6000", "MPU6500", "MPU9250", "BMI160", "ICM20689", "FAKE"];
|
|
||||||
},
|
|
||||||
getBarometerNames: function () {
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
|
||||||
return ["NONE", "AUTO", "BMP085", "MS5611", "BMP280", "MS5607", "LPS25H", "SPL06", "BMP388", "DPS310", "MSP", "FAKE"];
|
|
||||||
} else {
|
|
||||||
return ["NONE", "AUTO", "BMP085", "MS5611", "BMP280", "MS5607", "LPS25H", "SPL06", "BMP388", "FAKE"];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getPitotNames: function () {
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
|
||||||
return ["NONE", "AUTO", "MS4525", "ADC", "VIRTUAL", "FAKE", "MSP"];
|
|
||||||
} else {
|
|
||||||
return ["NONE", "AUTO", "MS4525", "ADC", "VIRTUAL", "FAKE"];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getRangefinderNames: function () {
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
|
|
||||||
return [ "NONE", "SRF10", "INAV_I2C", "VL53L0X", "MSP", "Benewake TFmini", "VL53L1X", "US42"];
|
|
||||||
} else {
|
|
||||||
return [ "NONE", "HCSR04", "SRF10", "INAV_I2C", "VL53L0X", "MSP", "UIB", "Benewake TFmini"];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getOpticalFlowNames: function () {
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.7.0")) {
|
|
||||||
return [ "NONE", "CXOF", "MSP", "FAKE" ];
|
|
||||||
} else {
|
|
||||||
return [ "NONE", "PMW3901", "CXOF", "MSP", "FAKE" ];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getArmingFlags: function () {
|
getArmingFlags: function () {
|
||||||
return {
|
return {
|
||||||
0: "OK_TO_ARM",
|
0: "OK_TO_ARM",
|
||||||
|
@ -933,7 +773,7 @@ var FC = {
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
getPidNames: function () {
|
getPidNames: function () {
|
||||||
let list = [
|
return [
|
||||||
'Roll',
|
'Roll',
|
||||||
'Pitch',
|
'Pitch',
|
||||||
'Yaw',
|
'Yaw',
|
||||||
|
@ -943,14 +783,9 @@ var FC = {
|
||||||
'Surface',
|
'Surface',
|
||||||
'Level',
|
'Level',
|
||||||
'Heading Hold',
|
'Heading Hold',
|
||||||
'Velocity Z'
|
'Velocity Z',
|
||||||
|
'Nav Heading'
|
||||||
];
|
];
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, '2.5.0')) {
|
|
||||||
list.push("Nav Heading")
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
},
|
},
|
||||||
getRthAltControlMode: function () {
|
getRthAltControlMode: function () {
|
||||||
return ["Current", "Extra", "Fixed", "Max", "At least", "At least, linear descent"];
|
return ["Current", "Extra", "Fixed", "Max", "At least", "At least, linear descent"];
|
||||||
|
|
|
@ -18,7 +18,6 @@ var GUI_control = function () {
|
||||||
];
|
];
|
||||||
this.defaultAllowedTabsWhenConnected = [
|
this.defaultAllowedTabsWhenConnected = [
|
||||||
'failsafe',
|
'failsafe',
|
||||||
'transponder',
|
|
||||||
'adjustments',
|
'adjustments',
|
||||||
'auxiliary',
|
'auxiliary',
|
||||||
'cli',
|
'cli',
|
||||||
|
|
|
@ -72,7 +72,7 @@ var MSP = {
|
||||||
|
|
||||||
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
||||||
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l'], // in LSB bit order
|
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l'], // in LSB bit order
|
||||||
ledBaseFunctionLetters: ['c', 'f', 'a', 'l', 's', 'g', 'r'], // in LSB bit
|
ledBaseFunctionLetters: ['c', 'f', 'a', 'l', 's', 'g', 'r', 'h'], // in LSB bit
|
||||||
ledOverlayLetters: ['t', 'o', 'b', 'n', 'i', 'w'], // in LSB bit
|
ledOverlayLetters: ['t', 'o', 'b', 'n', 'i', 'w'], // in LSB bit
|
||||||
|
|
||||||
last_received_timestamp: null,
|
last_received_timestamp: null,
|
||||||
|
|
|
@ -64,8 +64,6 @@ var MSPCodes = {
|
||||||
MSP_SDCARD_SUMMARY: 79,
|
MSP_SDCARD_SUMMARY: 79,
|
||||||
MSP_BLACKBOX_CONFIG: 80,
|
MSP_BLACKBOX_CONFIG: 80,
|
||||||
MSP_SET_BLACKBOX_CONFIG: 81,
|
MSP_SET_BLACKBOX_CONFIG: 81,
|
||||||
MSP_TRANSPONDER_CONFIG: 82,
|
|
||||||
MSP_SET_TRANSPONDER_CONFIG: 83,
|
|
||||||
MSP_OSD_CONFIG: 84,
|
MSP_OSD_CONFIG: 84,
|
||||||
MSP_SET_OSD_CONFIG: 85,
|
MSP_SET_OSD_CONFIG: 85,
|
||||||
MSP_OSD_CHAR_READ: 86,
|
MSP_OSD_CHAR_READ: 86,
|
||||||
|
@ -107,7 +105,7 @@ var MSPCodes = {
|
||||||
MSP_RC_DEADBAND: 125,
|
MSP_RC_DEADBAND: 125,
|
||||||
MSP_SENSOR_ALIGNMENT: 126,
|
MSP_SENSOR_ALIGNMENT: 126,
|
||||||
MSP_LED_STRIP_MODECOLOR:127,
|
MSP_LED_STRIP_MODECOLOR:127,
|
||||||
MSP_STATUS_EX: 150,
|
MSP_STATUS_EX: 150, // Deprecated, do not use.
|
||||||
MSP_SENSOR_STATUS: 151,
|
MSP_SENSOR_STATUS: 151,
|
||||||
|
|
||||||
MSP_SET_RAW_RC: 200,
|
MSP_SET_RAW_RC: 200,
|
||||||
|
|
|
@ -68,27 +68,6 @@ var mspHelper = (function (gui) {
|
||||||
colorCount,
|
colorCount,
|
||||||
color;
|
color;
|
||||||
if (!dataHandler.unsupported || dataHandler.unsupported) switch (dataHandler.code) {
|
if (!dataHandler.unsupported || dataHandler.unsupported) switch (dataHandler.code) {
|
||||||
case MSPCodes.MSP_STATUS:
|
|
||||||
console.log('Using deprecated msp command: MSP_STATUS');
|
|
||||||
CONFIG.cycleTime = data.getUint16(0, true);
|
|
||||||
CONFIG.i2cError = data.getUint16(2, true);
|
|
||||||
CONFIG.activeSensors = data.getUint16(4, true);
|
|
||||||
CONFIG.mode = data.getUint32(6, true);
|
|
||||||
CONFIG.profile = data.getUint8(10);
|
|
||||||
gui.updateProfileChange();
|
|
||||||
gui.updateStatusBar();
|
|
||||||
break;
|
|
||||||
case MSPCodes.MSP_STATUS_EX:
|
|
||||||
CONFIG.cycleTime = data.getUint16(0, true);
|
|
||||||
CONFIG.i2cError = data.getUint16(2, true);
|
|
||||||
CONFIG.activeSensors = data.getUint16(4, true);
|
|
||||||
CONFIG.profile = data.getUint8(10);
|
|
||||||
CONFIG.cpuload = data.getUint16(11, true);
|
|
||||||
CONFIG.armingFlags = data.getUint16(13, true);
|
|
||||||
gui.updateStatusBar();
|
|
||||||
gui.updateProfileChange();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MSPCodes.MSPV2_INAV_STATUS:
|
case MSPCodes.MSPV2_INAV_STATUS:
|
||||||
CONFIG.cycleTime = data.getUint16(offset, true);
|
CONFIG.cycleTime = data.getUint16(offset, true);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
|
@ -125,12 +104,7 @@ var mspHelper = (function (gui) {
|
||||||
SENSOR_STATUS.rangeHwStatus = data.getUint8(6);
|
SENSOR_STATUS.rangeHwStatus = data.getUint8(6);
|
||||||
SENSOR_STATUS.speedHwStatus = data.getUint8(7);
|
SENSOR_STATUS.speedHwStatus = data.getUint8(7);
|
||||||
SENSOR_STATUS.flowHwStatus = data.getUint8(8);
|
SENSOR_STATUS.flowHwStatus = data.getUint8(8);
|
||||||
|
SENSOR_STATUS.imu2HwStatus = data.getUint8(9);
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
|
|
||||||
SENSOR_STATUS.imu2HwStatus = data.getUint8(9);
|
|
||||||
} else {
|
|
||||||
SENSOR_STATUS.imu2HwStatus = 0;
|
|
||||||
}
|
|
||||||
sensor_status_ex(SENSOR_STATUS);
|
sensor_status_ex(SENSOR_STATUS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -720,7 +694,7 @@ var mspHelper = (function (gui) {
|
||||||
BOARD_ALIGNMENT.pitch = data.getInt16(2, true); // -180 - 360
|
BOARD_ALIGNMENT.pitch = data.getInt16(2, true); // -180 - 360
|
||||||
BOARD_ALIGNMENT.yaw = data.getInt16(4, true); // -180 - 360
|
BOARD_ALIGNMENT.yaw = data.getInt16(4, true); // -180 - 360
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_BOARD_ALIGNMENT:
|
case MSPCodes.MSP_SET_BOARD_ALIGNMENT:
|
||||||
console.log('MSP_SET_BOARD_ALIGNMENT saved');
|
console.log('MSP_SET_BOARD_ALIGNMENT saved');
|
||||||
break;
|
break;
|
||||||
|
@ -1128,17 +1102,6 @@ var mspHelper = (function (gui) {
|
||||||
case MSPCodes.MSP_SET_BLACKBOX_CONFIG:
|
case MSPCodes.MSP_SET_BLACKBOX_CONFIG:
|
||||||
console.log("Blackbox config saved");
|
console.log("Blackbox config saved");
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_TRANSPONDER_CONFIG:
|
|
||||||
TRANSPONDER.supported = (data.getUint8(offset++) & 1) != 0;
|
|
||||||
TRANSPONDER.data = [];
|
|
||||||
var bytesRemaining = data.byteLength - offset;
|
|
||||||
for (i = 0; i < bytesRemaining; i++) {
|
|
||||||
TRANSPONDER.data.push(data.getUint8(offset++));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSPCodes.MSP_SET_TRANSPONDER_CONFIG:
|
|
||||||
console.log("Transponder config saved");
|
|
||||||
break;
|
|
||||||
case MSPCodes.MSP_VTX_CONFIG:
|
case MSPCodes.MSP_VTX_CONFIG:
|
||||||
VTX_CONFIG.device_type = data.getUint8(offset++);
|
VTX_CONFIG.device_type = data.getUint8(offset++);
|
||||||
if (VTX_CONFIG.device_type != VTX.DEV_UNKNOWN) {
|
if (VTX_CONFIG.device_type != VTX.DEV_UNKNOWN) {
|
||||||
|
@ -1274,11 +1237,9 @@ var mspHelper = (function (gui) {
|
||||||
CALIBRATION_DATA.magZero.Z = data.getInt16(17, true);
|
CALIBRATION_DATA.magZero.Z = data.getInt16(17, true);
|
||||||
CALIBRATION_DATA.opflow.Scale = (data.getInt16(19, true) / 256.0);
|
CALIBRATION_DATA.opflow.Scale = (data.getInt16(19, true) / 256.0);
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
CALIBRATION_DATA.magGain.X = data.getInt16(21, true);
|
||||||
CALIBRATION_DATA.magGain.X = data.getInt16(21, true);
|
CALIBRATION_DATA.magGain.Y = data.getInt16(23, true);
|
||||||
CALIBRATION_DATA.magGain.Y = data.getInt16(23, true);
|
CALIBRATION_DATA.magGain.Z = data.getInt16(25, true);
|
||||||
CALIBRATION_DATA.magGain.Z = data.getInt16(25, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1520,7 +1481,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
// fire callback
|
// fire callback
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback({'command': dataHandler.code, 'data': data, 'length': dataHandler.message_length_expected});
|
callback({ 'command': dataHandler.code, 'data': data, 'length': dataHandler.message_length_expected });
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1559,7 +1520,7 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(specificByte(CURRENT_METER_CONFIG.capacity, 0));
|
buffer.push(specificByte(CURRENT_METER_CONFIG.capacity, 0));
|
||||||
buffer.push(specificByte(CURRENT_METER_CONFIG.capacity, 1));
|
buffer.push(specificByte(CURRENT_METER_CONFIG.capacity, 1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_VTX_CONFIG:
|
case MSPCodes.MSP_SET_VTX_CONFIG:
|
||||||
if (VTX_CONFIG.band > 0) {
|
if (VTX_CONFIG.band > 0) {
|
||||||
buffer.push16(((VTX_CONFIG.band - 1) * 8) + (VTX_CONFIG.channel - 1));
|
buffer.push16(((VTX_CONFIG.band - 1) * 8) + (VTX_CONFIG.channel - 1));
|
||||||
|
@ -1772,12 +1733,6 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(FAILSAFE_CONFIG.failsafe_min_distance_procedure);
|
buffer.push(FAILSAFE_CONFIG.failsafe_min_distance_procedure);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_TRANSPONDER_CONFIG:
|
|
||||||
for (i = 0; i < TRANSPONDER.data.length; i++) {
|
|
||||||
buffer.push(TRANSPONDER.data[i]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_CHANNEL_FORWARDING:
|
case MSPCodes.MSP_SET_CHANNEL_FORWARDING:
|
||||||
for (i = 0; i < SERVO_CONFIG.length; i++) {
|
for (i = 0; i < SERVO_CONFIG.length; i++) {
|
||||||
var out = SERVO_CONFIG[i].indexOfChannelToForward;
|
var out = SERVO_CONFIG[i].indexOfChannelToForward;
|
||||||
|
@ -1925,16 +1880,14 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(lowByte(Math.round(CALIBRATION_DATA.opflow.Scale * 256)));
|
buffer.push(lowByte(Math.round(CALIBRATION_DATA.opflow.Scale * 256)));
|
||||||
buffer.push(highByte(Math.round(CALIBRATION_DATA.opflow.Scale * 256)));
|
buffer.push(highByte(Math.round(CALIBRATION_DATA.opflow.Scale * 256)));
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
buffer.push(lowByte(CALIBRATION_DATA.magGain.X));
|
||||||
buffer.push(lowByte(CALIBRATION_DATA.magGain.X));
|
buffer.push(highByte(CALIBRATION_DATA.magGain.X));
|
||||||
buffer.push(highByte(CALIBRATION_DATA.magGain.X));
|
|
||||||
|
|
||||||
buffer.push(lowByte(CALIBRATION_DATA.magGain.Y));
|
buffer.push(lowByte(CALIBRATION_DATA.magGain.Y));
|
||||||
buffer.push(highByte(CALIBRATION_DATA.magGain.Y));
|
buffer.push(highByte(CALIBRATION_DATA.magGain.Y));
|
||||||
|
|
||||||
buffer.push(lowByte(CALIBRATION_DATA.magGain.Z));
|
buffer.push(lowByte(CALIBRATION_DATA.magGain.Z));
|
||||||
buffer.push(highByte(CALIBRATION_DATA.magGain.Z));
|
buffer.push(highByte(CALIBRATION_DATA.magGain.Z));
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2151,9 +2104,9 @@ var mspHelper = (function (gui) {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.sendBlackboxConfiguration = function (onDataCallback) {
|
self.sendBlackboxConfiguration = function (onDataCallback) {
|
||||||
var buffer = [];
|
var buffer = [];
|
||||||
var messageId = MSPCodes.MSP_SET_BLACKBOX_CONFIG;
|
var messageId = MSPCodes.MSP_SET_BLACKBOX_CONFIG;
|
||||||
buffer.push(BLACKBOX.blackboxDevice & 0xFF);
|
buffer.push(BLACKBOX.blackboxDevice & 0xFF);
|
||||||
messageId = MSPCodes.MSP2_SET_BLACKBOX_CONFIG;
|
messageId = MSPCodes.MSP2_SET_BLACKBOX_CONFIG;
|
||||||
buffer.push(lowByte(BLACKBOX.blackboxRateNum));
|
buffer.push(lowByte(BLACKBOX.blackboxRateNum));
|
||||||
buffer.push(highByte(BLACKBOX.blackboxRateNum));
|
buffer.push(highByte(BLACKBOX.blackboxRateNum));
|
||||||
|
@ -2161,7 +2114,7 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(highByte(BLACKBOX.blackboxRateDenom));
|
buffer.push(highByte(BLACKBOX.blackboxRateDenom));
|
||||||
//noinspection JSUnusedLocalSymbols
|
//noinspection JSUnusedLocalSymbols
|
||||||
MSP.send_message(messageId, buffer, false, function (response) {
|
MSP.send_message(messageId, buffer, false, function (response) {
|
||||||
onDataCallback();
|
onDataCallback();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2328,9 +2281,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
buffer.push(conditionIndex);
|
buffer.push(conditionIndex);
|
||||||
buffer.push(condition.getEnabled());
|
buffer.push(condition.getEnabled());
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
buffer.push(condition.getActivatorId());
|
||||||
buffer.push(condition.getActivatorId());
|
|
||||||
}
|
|
||||||
buffer.push(condition.getOperation());
|
buffer.push(condition.getOperation());
|
||||||
buffer.push(condition.getOperandAType());
|
buffer.push(condition.getOperandAType());
|
||||||
buffer.push(specificByte(condition.getOperandAValue(), 0));
|
buffer.push(specificByte(condition.getOperandAValue(), 0));
|
||||||
|
@ -2623,7 +2574,7 @@ var mspHelper = (function (gui) {
|
||||||
/*
|
/*
|
||||||
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
||||||
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l'], // in LSB bit order
|
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l'], // in LSB bit order
|
||||||
ledBaseFunctionLetters: ['c', 'f', 'a', 'l', 's', 'g', 'r'], // in LSB bit
|
ledBaseFunctionLetters: ['c', 'f', 'a', 'l', 's', 'g', 'r', 'h'], // in LSB bit
|
||||||
ledOverlayLetters: ['t', 'o', 'b', 'n', 'i', 'w'], // in LSB bit
|
ledOverlayLetters: ['t', 'o', 'b', 'n', 'i', 'w'], // in LSB bit
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -2714,10 +2665,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_INAV_PID, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_INAV_PID, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadLoopTime = function (callback) {
|
|
||||||
MSP.send_message(MSPCodes.MSP_LOOP_TIME, false, false, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.loadAdvancedConfig = function (callback) {
|
self.loadAdvancedConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, callback);
|
||||||
};
|
};
|
||||||
|
@ -2746,10 +2693,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_PIDNAMES, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_PIDNAMES, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadStatus = function (callback) {
|
|
||||||
MSP.send_message(MSPCodes.MSP_STATUS, false, false, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.loadFeatures = function (callback) {
|
self.loadFeatures = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_FEATURE, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_FEATURE, false, false, callback);
|
||||||
};
|
};
|
||||||
|
@ -2757,7 +2700,7 @@ var mspHelper = (function (gui) {
|
||||||
self.loadBoardAlignment = function (callback) {
|
self.loadBoardAlignment = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_BOARD_ALIGNMENT, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_BOARD_ALIGNMENT, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadCurrentMeterConfig = function (callback) {
|
self.loadCurrentMeterConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, callback);
|
||||||
};
|
};
|
||||||
|
@ -2779,7 +2722,7 @@ var mspHelper = (function (gui) {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadBatteryConfig = function (callback) {
|
self.loadBatteryConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSPV2_BATTERY_CONFIG, false, false, callback);
|
MSP.send_message(MSPCodes.MSPV2_BATTERY_CONFIG, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadArmingConfig = function (callback) {
|
self.loadArmingConfig = function (callback) {
|
||||||
|
@ -2834,10 +2777,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_SET_INAV_PID, mspHelper.crunch(MSPCodes.MSP_SET_INAV_PID), false, callback);
|
MSP.send_message(MSPCodes.MSP_SET_INAV_PID, mspHelper.crunch(MSPCodes.MSP_SET_INAV_PID), false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.saveLooptimeConfig = function (callback) {
|
|
||||||
MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.saveAdvancedConfig = function (callback) {
|
self.saveAdvancedConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, callback);
|
MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, callback);
|
||||||
};
|
};
|
||||||
|
@ -2947,7 +2886,7 @@ var mspHelper = (function (gui) {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.saveFwConfig = function (callback) {
|
self.saveFwConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_SET_FW_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FW_CONFIG), false, callback);
|
MSP.send_message(MSPCodes.MSP_SET_FW_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FW_CONFIG), false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.getMissionInfo = function (callback) {
|
self.getMissionInfo = function (callback) {
|
||||||
|
@ -2999,7 +2938,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
function nextSafehome() {
|
function nextSafehome() {
|
||||||
safehomeId++;
|
safehomeId++;
|
||||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount()-1) {
|
if (safehomeId < SAFEHOMES.getMaxSafehomeCount() - 1) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_SAFEHOME, [safehomeId], false, nextSafehome);
|
MSP.send_message(MSPCodes.MSP2_INAV_SAFEHOME, [safehomeId], false, nextSafehome);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -3014,7 +2953,7 @@ var mspHelper = (function (gui) {
|
||||||
|
|
||||||
function nextSendSafehome() {
|
function nextSendSafehome() {
|
||||||
safehomeId++;
|
safehomeId++;
|
||||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount()-1) {
|
if (safehomeId < SAFEHOMES.getMaxSafehomeCount() - 1) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_SET_SAFEHOME, SAFEHOMES.extractBuffer(safehomeId), false, nextSendSafehome);
|
MSP.send_message(MSPCodes.MSP2_INAV_SET_SAFEHOME, SAFEHOMES.extractBuffer(safehomeId), false, nextSendSafehome);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -3043,9 +2982,7 @@ var mspHelper = (function (gui) {
|
||||||
var setting = {};
|
var setting = {};
|
||||||
|
|
||||||
// Discard setting name
|
// Discard setting name
|
||||||
if (semver.gte(CONFIG.apiVersion, "2.4.0")) {
|
result.data.readString();
|
||||||
result.data.readString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Discard PG ID
|
// Discard PG ID
|
||||||
result.data.readU16();
|
result.data.readU16();
|
||||||
|
@ -3073,7 +3010,7 @@ var mspHelper = (function (gui) {
|
||||||
for (var ii = setting.min; ii <= setting.max; ii++) {
|
for (var ii = setting.min; ii <= setting.max; ii++) {
|
||||||
values.push(result.data.readString());
|
values.push(result.data.readString());
|
||||||
}
|
}
|
||||||
setting.table = {values: values};
|
setting.table = { values: values };
|
||||||
}
|
}
|
||||||
SETTINGS[name] = setting;
|
SETTINGS[name] = setting;
|
||||||
return setting;
|
return setting;
|
||||||
|
@ -3128,7 +3065,7 @@ var mspHelper = (function (gui) {
|
||||||
default:
|
default:
|
||||||
throw "Unknown setting type " + setting.type;
|
throw "Unknown setting type " + setting.type;
|
||||||
}
|
}
|
||||||
return {setting: setting, value: value};
|
return { setting: setting, value: value };
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -3217,8 +3154,8 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_MOTOR, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_MOTOR, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.getCraftName = function(callback) {
|
self.getCraftName = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_NAME, false, false, function(resp) {
|
MSP.send_message(MSPCodes.MSP_NAME, false, false, function (resp) {
|
||||||
var name = resp.data.readString();
|
var name = resp.data.readString();
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback(name);
|
callback(name);
|
||||||
|
@ -3226,7 +3163,7 @@ var mspHelper = (function (gui) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
self.setCraftName = function(name, callback) {
|
self.setCraftName = function (name, callback) {
|
||||||
var data = [];
|
var data = [];
|
||||||
name = name || "";
|
name = name || "";
|
||||||
for (var ii = 0; ii < name.length; ii++) {
|
for (var ii = 0; ii < name.length; ii++) {
|
||||||
|
@ -3247,26 +3184,26 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_VTX_CONFIG, false, false, callback);
|
MSP.send_message(MSPCodes.MSP_VTX_CONFIG, false, false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.saveVTXConfig = function(callback) {
|
self.saveVTXConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_SET_VTX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VTX_CONFIG), false, callback);
|
MSP.send_message(MSPCodes.MSP_SET_VTX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VTX_CONFIG), false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadBrakingConfig = function(callback) {
|
self.loadBrakingConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_MC_BRAKING, false, false, callback);
|
MSP.send_message(MSPCodes.MSP2_INAV_MC_BRAKING, false, false, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.saveBrakingConfig = function(callback) {
|
self.saveBrakingConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_SET_MC_BRAKING, mspHelper.crunch(MSPCodes.MSP2_INAV_SET_MC_BRAKING), false, callback);
|
MSP.send_message(MSPCodes.MSP2_INAV_SET_MC_BRAKING, mspHelper.crunch(MSPCodes.MSP2_INAV_SET_MC_BRAKING), false, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadParameterGroups = function(callback) {
|
self.loadParameterGroups = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP2_COMMON_PG_LIST, false, false, function (resp) {
|
MSP.send_message(MSPCodes.MSP2_COMMON_PG_LIST, false, false, function (resp) {
|
||||||
var groups = [];
|
var groups = [];
|
||||||
while (resp.data.offset < resp.data.byteLength) {
|
while (resp.data.offset < resp.data.byteLength) {
|
||||||
var id = resp.data.readU16();
|
var id = resp.data.readU16();
|
||||||
var start = resp.data.readU16();
|
var start = resp.data.readU16();
|
||||||
var end = resp.data.readU16();
|
var end = resp.data.readU16();
|
||||||
groups.push({id: id, start: start, end: end});
|
groups.push({ id: id, start: start, end: end });
|
||||||
}
|
}
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback(groups);
|
callback(groups);
|
||||||
|
@ -3274,7 +3211,7 @@ var mspHelper = (function (gui) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadBrakingConfig = function(callback) {
|
self.loadBrakingConfig = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_MC_BRAKING, false, false, callback);
|
MSP.send_message(MSPCodes.MSP2_INAV_MC_BRAKING, false, false, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3283,19 +3220,11 @@ var mspHelper = (function (gui) {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadGlobalVariablesStatus = function (callback) {
|
self.loadGlobalVariablesStatus = function (callback) {
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
MSP.send_message(MSPCodes.MSP2_INAV_GVAR_STATUS, false, false, callback);
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_GVAR_STATUS, false, false, callback);
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.loadProgrammingPidStatus = function (callback) {
|
self.loadProgrammingPidStatus = function (callback) {
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
MSP.send_message(MSPCodes.MSP2_INAV_PROGRAMMING_PID_STATUS, false, false, callback);
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_PROGRAMMING_PID_STATUS, false, false, callback);
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -62,7 +62,7 @@ $(document).ready(function () {
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
helper.timeout.add('waiting_for_bootup', function waiting_for_bootup() {
|
helper.timeout.add('waiting_for_bootup', function waiting_for_bootup() {
|
||||||
MSP.send_message(MSPCodes.MSP_STATUS, false, false, function () {
|
MSP.send_message(MSPCodes.MSPV2_INAV_STATUS, false, false, function () {
|
||||||
//noinspection JSUnresolvedVariable
|
//noinspection JSUnresolvedVariable
|
||||||
GUI.log(chrome.i18n.getMessage('deviceReady'));
|
GUI.log(chrome.i18n.getMessage('deviceReady'));
|
||||||
//noinspection JSValidateTypes
|
//noinspection JSValidateTypes
|
||||||
|
@ -334,12 +334,8 @@ function onConnect() {
|
||||||
/*
|
/*
|
||||||
* Init PIDs bank with a length that depends on the version
|
* Init PIDs bank with a length that depends on the version
|
||||||
*/
|
*/
|
||||||
let pidCount;
|
let pidCount = 11;
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
|
||||||
pidCount = 11;
|
|
||||||
} else {
|
|
||||||
pidCount = 10;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < pidCount; i++) {
|
for (let i = 0; i < pidCount; i++) {
|
||||||
PIDs.push(new Array(4));
|
PIDs.push(new Array(4));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const GulpClient = require("gulp");
|
|
||||||
|
|
||||||
var Settings = (function () {
|
var Settings = (function () {
|
||||||
let self = {};
|
let self = {};
|
||||||
|
|
||||||
|
|
25
js/tasks.js
25
js/tasks.js
|
@ -1,25 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var helper = helper || {};
|
|
||||||
|
|
||||||
helper.task = (function () {
|
|
||||||
|
|
||||||
var publicScope = {},
|
|
||||||
privateScope = {};
|
|
||||||
|
|
||||||
privateScope.getStatusPullInterval = function () {
|
|
||||||
//TODO use serial connection speed to determine update interval
|
|
||||||
return 250;
|
|
||||||
};
|
|
||||||
|
|
||||||
publicScope.statusPullStart = function () {
|
|
||||||
helper.interval.add('status_pull', function () {
|
|
||||||
MSP.send_message(MSPCodes.MSP_STATUS, false, false, function () {
|
|
||||||
MSP.send_message(MSPCodes.MSP_SENSOR_STATUS);
|
|
||||||
});
|
|
||||||
|
|
||||||
}, privateScope.getStatusPullInterval(), true);
|
|
||||||
};
|
|
||||||
|
|
||||||
return publicScope;
|
|
||||||
})();
|
|
12
main.css
12
main.css
|
@ -902,18 +902,6 @@ li.active .ic_flasher {
|
||||||
background-image: url("../images/icons/cf_icon_flasher_white.svg");
|
background-image: url("../images/icons/cf_icon_flasher_white.svg");
|
||||||
}
|
}
|
||||||
|
|
||||||
.ic_transponder {
|
|
||||||
background-image: url("../images/icons/cf_icon_transponder_grey.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.ic_transponder:hover {
|
|
||||||
background-image: url("../images/icons/cf_icon_transponder_white.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
li.active .ic_transponder {
|
|
||||||
background-image: url("../images/icons/cf_icon_transponder_white.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.ic_calibration {
|
.ic_calibration {
|
||||||
background-image: url(../images/icons/cf_icon_cal_grey.svg);
|
background-image: url(../images/icons/cf_icon_cal_grey.svg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,7 +231,6 @@
|
||||||
<li class="tab_osd">
|
<li class="tab_osd">
|
||||||
<a href="#" data-i18n="tabOSD" class="tabicon ic_osd" title="OSD"></a>
|
<a href="#" data-i18n="tabOSD" class="tabicon ic_osd" title="OSD"></a>
|
||||||
</li>
|
</li>
|
||||||
<!--<li class="tab_transponder"><a href="#" data-i18n="tabTransponder" class="tabicon ic_transponder" title="Transponder"></a></li>-->
|
|
||||||
<li class="tab_led_strip">
|
<li class="tab_led_strip">
|
||||||
<a href="#" data-i18n="tabLedStrip" class="tabicon ic_led" title="LED Strip"></a>
|
<a href="#" data-i18n="tabLedStrip" class="tabicon ic_led" title="LED Strip"></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
3
main.js
3
main.js
|
@ -230,9 +230,6 @@ $(document).ready(function () {
|
||||||
case 'failsafe':
|
case 'failsafe':
|
||||||
TABS.failsafe.initialize(content_ready);
|
TABS.failsafe.initialize(content_ready);
|
||||||
break;
|
break;
|
||||||
case 'transponder':
|
|
||||||
TABS.transponder.initialize(content_ready);
|
|
||||||
break;
|
|
||||||
case 'setup':
|
case 'setup':
|
||||||
TABS.setup.initialize(content_ready);
|
TABS.setup.initialize(content_ready);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -35,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.61.0-sdk",
|
"nw": "^0.61.0",
|
||||||
"nw-dialog": "^1.0.7",
|
"nw-dialog": "^1.0.7",
|
||||||
"openlayers": "^4.6.5",
|
"openlayers": "^4.6.5",
|
||||||
"plotly": "^1.0.6",
|
"plotly": "^1.0.6",
|
||||||
|
|
|
@ -6665,47 +6665,47 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
00000000
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01000101
|
|
||||||
01010101
|
|
||||||
01000101
|
|
||||||
00100001
|
|
||||||
01010101
|
|
||||||
00100001
|
|
||||||
00101000
|
|
||||||
01010100
|
|
||||||
10100001
|
|
||||||
01001010
|
|
||||||
00010010
|
|
||||||
10000101
|
|
||||||
01001010
|
|
||||||
10001010
|
|
||||||
10000101
|
|
||||||
01010010
|
|
||||||
10101010
|
|
||||||
00010101
|
|
||||||
01010010
|
|
||||||
10101010
|
|
||||||
00010101
|
00010101
|
||||||
01010100
|
01010100
|
||||||
10101000
|
10101010
|
||||||
01010101
|
10000101
|
||||||
01010100
|
01010100
|
||||||
10101000
|
10000000
|
||||||
01010101
|
10000101
|
||||||
01010101
|
01010100
|
||||||
00100001
|
10000000
|
||||||
01010101
|
10000101
|
||||||
01010101
|
01010100
|
||||||
00100001
|
10000000
|
||||||
01010101
|
10000101
|
||||||
01010101
|
01010100
|
||||||
01000101
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10101010
|
||||||
|
10000101
|
||||||
|
01010100
|
||||||
|
10101010
|
||||||
|
10000101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Binary file not shown.
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 1.6 KiB |
|
@ -74,6 +74,12 @@
|
||||||
border-color: rgb(52, 155, 255);
|
border-color: rgb(52, 155, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-led-strip .gPoint.function-h { /* Channel */
|
||||||
|
background: skyblue;
|
||||||
|
box-shadow: inset 0 0 30px rgba(0, 0, 0, .7);
|
||||||
|
border-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
.tab-led-strip .gPoint.function-c .overlay-color,
|
.tab-led-strip .gPoint.function-c .overlay-color,
|
||||||
.tab-led-strip .gPoint.function-r .overlay-color {
|
.tab-led-strip .gPoint.function-r .overlay-color {
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -210,6 +216,7 @@
|
||||||
.tab-led-strip .select .function-g { background: green;}
|
.tab-led-strip .select .function-g { background: green;}
|
||||||
/* .tab-led-strip .select .function-b { background: white; color:black;} */
|
/* .tab-led-strip .select .function-b { background: white; color:black;} */
|
||||||
.tab-led-strip .select .function-r { background: #acacac;}
|
.tab-led-strip .select .function-r { background: #acacac;}
|
||||||
|
.tab-led-strip .select .function-h { background: skyblue;}
|
||||||
|
|
||||||
.tab-led-strip .select .functionSelect option {
|
.tab-led-strip .select .functionSelect option {
|
||||||
background: white;
|
background: white;
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
.tab-transponder .spacer_box {
|
|
||||||
padding-bottom: 10px;
|
|
||||||
float: left;
|
|
||||||
width: calc(100% - 20px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .text input {
|
|
||||||
width: 100px;
|
|
||||||
padding-left: 3px;
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
text-align: left;
|
|
||||||
border: 1px solid silver;
|
|
||||||
border-radius: 3px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .text .disabled {
|
|
||||||
width: 43px;
|
|
||||||
padding: 0 5px;
|
|
||||||
background-color: #ececec;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .text span {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder input {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder span {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .text
|
|
||||||
{
|
|
||||||
margin-bottom: 5px;
|
|
||||||
clear: left;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
width: 100%;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .text:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
padding-bottom: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .textspacer {
|
|
||||||
float: left;
|
|
||||||
width: 115px;
|
|
||||||
height: 21px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder .gui_box span {
|
|
||||||
font-style: normal;
|
|
||||||
font-family: 'open_sansregular', Arial,serif;
|
|
||||||
line-height: 19px;
|
|
||||||
color: #4F4F4F;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.require-transponder-supported,
|
|
||||||
.tab-transponder.transponder-supported .require-transponder-unsupported {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-transponder.transponder-supported .require-transponder-supported {
|
|
||||||
display: block;
|
|
||||||
}
|
|
|
@ -53,7 +53,7 @@ TABS.calibration.initialize = function (callback) {
|
||||||
googleAnalytics.sendAppView('Calibration');
|
googleAnalytics.sendAppView('Calibration');
|
||||||
}
|
}
|
||||||
loadChainer.setChain([
|
loadChainer.setChain([
|
||||||
mspHelper.loadStatus,
|
mspHelper.queryFcStatus,
|
||||||
mspHelper.loadSensorConfig,
|
mspHelper.loadSensorConfig,
|
||||||
mspHelper.loadCalibrationData
|
mspHelper.loadCalibrationData
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -32,7 +32,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
var loadChain = [
|
var loadChain = [
|
||||||
mspHelper.loadFeatures,
|
mspHelper.loadFeatures,
|
||||||
mspHelper.loadArmingConfig,
|
mspHelper.loadArmingConfig,
|
||||||
mspHelper.loadLoopTime,
|
|
||||||
mspHelper.load3dConfig,
|
mspHelper.load3dConfig,
|
||||||
mspHelper.loadSensorAlignment,
|
mspHelper.loadSensorAlignment,
|
||||||
mspHelper.loadAdvancedConfig,
|
mspHelper.loadAdvancedConfig,
|
||||||
|
@ -56,7 +55,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
mspHelper.saveSensorAlignment,
|
mspHelper.saveSensorAlignment,
|
||||||
mspHelper.saveAccTrim,
|
mspHelper.saveAccTrim,
|
||||||
mspHelper.saveArmingConfig,
|
mspHelper.saveArmingConfig,
|
||||||
mspHelper.saveLooptimeConfig,
|
|
||||||
mspHelper.saveAdvancedConfig,
|
mspHelper.saveAdvancedConfig,
|
||||||
mspHelper.saveINAVPidConfig,
|
mspHelper.saveINAVPidConfig,
|
||||||
mspHelper.saveVTXConfig,
|
mspHelper.saveVTXConfig,
|
||||||
|
@ -328,7 +326,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
||||||
|
|
||||||
craftName = $('input[name="craft_name"]').val();
|
craftName = $('input[name="craft_name"]').val();
|
||||||
|
|
||||||
googleAnalytics.sendEvent('Setting', 'Looptime', FC_CONFIG.loopTime);
|
|
||||||
googleAnalytics.sendEvent('Setting', 'I2CSpeed', $('#i2c_speed').children("option:selected").text());
|
googleAnalytics.sendEvent('Setting', 'I2CSpeed', $('#i2c_speed').children("option:selected").text());
|
||||||
|
|
||||||
googleAnalytics.sendEvent('Board', 'Accelerometer', $('#sensor-acc').children("option:selected").text());
|
googleAnalytics.sendEvent('Board', 'Accelerometer', $('#sensor-acc').children("option:selected").text());
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
<option value="function-s" class="extra_functions20">RSSI</option>
|
<option value="function-s" class="extra_functions20">RSSI</option>
|
||||||
<option value="function-g" class="extra_functions20">GPS</option>
|
<option value="function-g" class="extra_functions20">GPS</option>
|
||||||
<option value="function-r" class="">Ring</option>
|
<option value="function-r" class="">Ring</option>
|
||||||
|
<option value="function-h" class="channel_info">Channel</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -104,6 +105,10 @@
|
||||||
<label> <span>Indicator</span></label>
|
<label> <span>Indicator</span></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="channel_info">
|
||||||
|
<span class="color_section">Select Channel from color list</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="mode_colors">
|
<div class="mode_colors">
|
||||||
<div class="section">Mode colors</div>
|
<div class="section">Mode colors</div>
|
||||||
|
|
|
@ -11,15 +11,9 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
var selectedColorIndex = null;
|
var selectedColorIndex = null;
|
||||||
var selectedModeColor = null;
|
var selectedModeColor = null;
|
||||||
|
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
TABS.led_strip.functions = ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l', 'o', 'n'];
|
||||||
TABS.led_strip.functions = ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b'];
|
TABS.led_strip.baseFuncs = ['c', 'f', 'a', 'l', 's', 'g', 'r', 'h'];
|
||||||
TABS.led_strip.baseFuncs = ['c', 'f', 'a', 'b', 'g', 'r'];
|
TABS.led_strip.overlays = ['t', 'o', 'b', 'n', 'i', 'w'];
|
||||||
TABS.led_strip.overlays = ['t', 's', 'i', 'w'];
|
|
||||||
} else {
|
|
||||||
TABS.led_strip.functions = ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l', 'o', 'n'];
|
|
||||||
TABS.led_strip.baseFuncs = ['c', 'f', 'a', 'l', 's', 'g', 'r'];
|
|
||||||
TABS.led_strip.overlays = ['t', 'o', 'b', 'n', 'i', 'w'];
|
|
||||||
}
|
|
||||||
|
|
||||||
TABS.led_strip.wireMode = false;
|
TABS.led_strip.wireMode = false;
|
||||||
|
|
||||||
|
@ -37,16 +31,9 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_led_mode_colors() {
|
function load_led_mode_colors() {
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.19.0"))
|
MSP.send_message(MSPCodes.MSP_LED_STRIP_MODECOLOR, false, false, load_html);
|
||||||
MSP.send_message(MSPCodes.MSP_LED_STRIP_MODECOLOR, false, false, load_html);
|
|
||||||
else
|
|
||||||
load_html();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function load_html() {
|
function load_html() {
|
||||||
GUI.load("./tabs/led_strip.html", process_html);
|
GUI.load("./tabs/led_strip.html", process_html);
|
||||||
}
|
}
|
||||||
|
@ -74,10 +61,7 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
var theHTML = [];
|
var theHTML = [];
|
||||||
var theHTMLlength = 0;
|
var theHTMLlength = 0;
|
||||||
for (var i = 0; i < 256; i++) {
|
for (var i = 0; i < 256; i++) {
|
||||||
if (semver.lte(CONFIG.apiVersion, "1.19.0"))
|
theHTML[theHTMLlength++] = ('<div class="gPoint"><div class="indicators"><span class="north"></span><span class="south"></span><span class="west"></span><span class="east"></span><span class="up">U</span><span class="down">D</span></div><span class="wire"></span><span class="overlay-t"> </span><span class="overlay-o"> </span><span class="overlay-b"> </span><span class="overlay-n"> </span><span class="overlay-w"> </span><span class="overlay-i"> </span><span class="overlay-color"> </span></div>');
|
||||||
theHTML[theHTMLlength++] = ('<div class="gPoint"><div class="indicators"><span class="north"></span><span class="south"></span><span class="west"></span><span class="east"></span><span class="up">U</span><span class="down">D</span></div><span class="wire"></span><span class="overlay-t"> </span><span class="overlay-s"> </span><span class="overlay-w"> </span><span class="overlay-i"> </span><span class="overlay-color"> </span></div>');
|
|
||||||
else
|
|
||||||
theHTML[theHTMLlength++] = ('<div class="gPoint"><div class="indicators"><span class="north"></span><span class="south"></span><span class="west"></span><span class="east"></span><span class="up">U</span><span class="down">D</span></div><span class="wire"></span><span class="overlay-t"> </span><span class="overlay-o"> </span><span class="overlay-b"> </span><span class="overlay-n"> </span><span class="overlay-w"> </span><span class="overlay-i"> </span><span class="overlay-color"> </span></div>');
|
|
||||||
}
|
}
|
||||||
$('.mainGrid').html(theHTML.join(''));
|
$('.mainGrid').html(theHTML.join(''));
|
||||||
|
|
||||||
|
@ -549,10 +533,7 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function send_led_strip_mode_colors() {
|
function send_led_strip_mode_colors() {
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.19.0"))
|
mspHelper.sendLedStripModeColors(save_to_eeprom);
|
||||||
mspHelper.sendLedStripModeColors(save_to_eeprom);
|
|
||||||
else
|
|
||||||
save_to_eeprom();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function save_to_eeprom() {
|
function save_to_eeprom() {
|
||||||
|
@ -674,20 +655,18 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
|
|
||||||
// refresh mode color buttons
|
// refresh mode color buttons
|
||||||
function setModeBackgroundColor(element) {
|
function setModeBackgroundColor(element) {
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.19.0")) {
|
element.find('[class*="mode_color"]').each(function() {
|
||||||
element.find('[class*="mode_color"]').each(function() {
|
var m = 0;
|
||||||
var m = 0;
|
var d = 0;
|
||||||
var d = 0;
|
|
||||||
|
|
||||||
var match = $(this).attr("class").match(/(^|\s)mode_color-([0-9]+)-([0-9]+)(\s|$)/);
|
var match = $(this).attr("class").match(/(^|\s)mode_color-([0-9]+)-([0-9]+)(\s|$)/);
|
||||||
if (match) {
|
if (match) {
|
||||||
m = Number(match[2]);
|
m = Number(match[2]);
|
||||||
d = Number(match[3]);
|
d = Number(match[3]);
|
||||||
$(this).css('background-color', HsvToColor(LED_COLORS[getModeColor(m, d)]));
|
$(this).css('background-color', HsvToColor(LED_COLORS[getModeColor(m, d)]));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function setBackgroundColor(element) {
|
function setBackgroundColor(element) {
|
||||||
if (element.is('[class*="color"]')) {
|
if (element.is('[class*="color"]')) {
|
||||||
|
@ -713,42 +692,29 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function areOverlaysActive(activeFunction) {
|
function areOverlaysActive(activeFunction) {
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
switch (activeFunction) {
|
||||||
switch (activeFunction) {
|
case "":
|
||||||
case "function-c":
|
case "function-c":
|
||||||
case "function-a":
|
case "function-a":
|
||||||
case "function-f":
|
case "function-f":
|
||||||
case "function-g":
|
case "function-s":
|
||||||
return true;
|
case "function-l":
|
||||||
break;
|
case "function-r":
|
||||||
}
|
case "function-o":
|
||||||
} else {
|
case "function-g":
|
||||||
switch (activeFunction) {
|
return true;
|
||||||
case "":
|
break;
|
||||||
case "function-c":
|
|
||||||
case "function-a":
|
|
||||||
case "function-f":
|
|
||||||
case "function-s":
|
|
||||||
case "function-l":
|
|
||||||
case "function-r":
|
|
||||||
case "function-o":
|
|
||||||
case "function-g":
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function areBlinkersActive(activeFunction) {
|
function areBlinkersActive(activeFunction) {
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.20.0")) {
|
switch (activeFunction) {
|
||||||
switch (activeFunction) {
|
case "function-c":
|
||||||
case "function-c":
|
case "function-a":
|
||||||
case "function-a":
|
case "function-f":
|
||||||
case "function-f":
|
return true;
|
||||||
return true;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -758,13 +724,10 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
case "function-l":
|
case "function-l":
|
||||||
case "function-s":
|
case "function-s":
|
||||||
case "function-g":
|
case "function-g":
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case "function-r":
|
case "function-r":
|
||||||
case "function-b":
|
case "function-b":
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.20.0"))
|
return false;
|
||||||
return false;
|
break;
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
@ -776,29 +739,19 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
var activeFunction = $('select.functionSelect').val();
|
var activeFunction = $('select.functionSelect').val();
|
||||||
$('select.functionSelect').addClass(activeFunction);
|
$('select.functionSelect').addClass(activeFunction);
|
||||||
|
|
||||||
|
// >= 20
|
||||||
if (semver.lte(CONFIG.apiVersion, "1.18.0")) {
|
// Show GPS (Func)
|
||||||
// <= 18
|
// Hide RSSI (O/L), Blink (Func)
|
||||||
// Hide GPS (Func)
|
// Show Battery, RSSI (Func), Larson (O/L), Blink (O/L), Landing (O/L)
|
||||||
// Hide RSSI (O/L), Blink (Func)
|
$(".extra_functions20").show();
|
||||||
// Hide Battery, RSSI (Func), Larson (O/L), Blink (O/L), Landing (O/L)
|
$(".mode_colors").show();
|
||||||
$(".extra_functions20").hide();
|
|
||||||
$(".mode_colors").hide();
|
|
||||||
} else {
|
|
||||||
// >= 20
|
|
||||||
// Show GPS (Func)
|
|
||||||
// Hide RSSI (O/L), Blink (Func)
|
|
||||||
// Show Battery, RSSI (Func), Larson (O/L), Blink (O/L), Landing (O/L)
|
|
||||||
$(".extra_functions20").show();
|
|
||||||
$(".mode_colors").show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// set color modifiers (check-boxes) visibility
|
// set color modifiers (check-boxes) visibility
|
||||||
$('.overlays').hide();
|
$('.overlays').hide();
|
||||||
$('.modifiers').hide();
|
$('.modifiers').hide();
|
||||||
$('.blinkers').hide();
|
$('.blinkers').hide();
|
||||||
$('.warningOverlay').hide();
|
$('.warningOverlay').hide();
|
||||||
|
$('.channel_info').hide();
|
||||||
|
|
||||||
if (areOverlaysActive(activeFunction))
|
if (areOverlaysActive(activeFunction))
|
||||||
$('.overlays').show();
|
$('.overlays').show();
|
||||||
|
@ -812,67 +765,53 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
if (isWarningActive(activeFunction))
|
if (isWarningActive(activeFunction))
|
||||||
$('.warningOverlay').show();
|
$('.warningOverlay').show();
|
||||||
|
|
||||||
|
$('.mode_colors').hide();
|
||||||
|
// set mode colors visibility
|
||||||
|
|
||||||
|
if (activeFunction == "function-f") {
|
||||||
// set directions visibility
|
$('.mode_colors').show();
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
|
||||||
switch (activeFunction) {
|
|
||||||
case "function-r":
|
|
||||||
$('.indicatorOverlay').hide();
|
|
||||||
$('.directions').hide();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$('.indicatorOverlay').show();
|
|
||||||
$('.directions').show();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.mode_colors').hide();
|
// set special colors visibility
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.19.0")) {
|
$('.special_colors').show();
|
||||||
// set mode colors visibility
|
$('.mode_color-6-0').hide();
|
||||||
|
$('.mode_color-6-1').hide();
|
||||||
|
$('.mode_color-6-2').hide();
|
||||||
|
$('.mode_color-6-3').hide();
|
||||||
|
$('.mode_color-6-4').hide();
|
||||||
|
$('.mode_color-6-5').hide();
|
||||||
|
$('.mode_color-6-6').hide();
|
||||||
|
$('.mode_color-6-7').hide();
|
||||||
|
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.20.0"))
|
switch (activeFunction) {
|
||||||
if (activeFunction == "function-f")
|
case "": // none
|
||||||
$('.mode_colors').show();
|
case "function-f": // Modes & Orientation
|
||||||
|
case "function-l": // Battery
|
||||||
// set special colors visibility
|
// $('.mode_color-6-3').show(); // background
|
||||||
$('.special_colors').show();
|
$('.special_colors').hide();
|
||||||
$('.mode_color-6-0').hide();
|
|
||||||
$('.mode_color-6-1').hide();
|
|
||||||
$('.mode_color-6-2').hide();
|
|
||||||
$('.mode_color-6-3').hide();
|
|
||||||
$('.mode_color-6-4').hide();
|
|
||||||
$('.mode_color-6-5').hide();
|
|
||||||
$('.mode_color-6-6').hide();
|
|
||||||
$('.mode_color-6-7').hide();
|
|
||||||
|
|
||||||
switch (activeFunction) {
|
|
||||||
case "": // none
|
|
||||||
case "function-f": // Modes & Orientation
|
|
||||||
case "function-l": // Battery
|
|
||||||
// $('.mode_color-6-3').show(); // background
|
|
||||||
$('.special_colors').hide();
|
|
||||||
break;
|
|
||||||
case "function-g": // GPS
|
|
||||||
$('.mode_color-6-5').show(); // no sats
|
|
||||||
$('.mode_color-6-6').show(); // no lock
|
|
||||||
$('.mode_color-6-7').show(); // locked
|
|
||||||
// $('.mode_color-6-3').show(); // background
|
|
||||||
break;
|
|
||||||
case "function-b": // Blink
|
|
||||||
$('.mode_color-6-4').show(); // blink background
|
|
||||||
break;
|
|
||||||
case "function-a": // Arm state
|
|
||||||
$('.mode_color-6-0').show(); // disarmed
|
|
||||||
$('.mode_color-6-1').show(); // armed
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "function-r": // Ring
|
|
||||||
default:
|
|
||||||
$('.special_colors').hide();
|
|
||||||
break;
|
break;
|
||||||
}
|
case "function-g": // GPS
|
||||||
|
$('.mode_color-6-5').show(); // no sats
|
||||||
|
$('.mode_color-6-6').show(); // no lock
|
||||||
|
$('.mode_color-6-7').show(); // locked
|
||||||
|
// $('.mode_color-6-3').show(); // background
|
||||||
|
break;
|
||||||
|
case "function-b": // Blink
|
||||||
|
$('.mode_color-6-4').show(); // blink background
|
||||||
|
break;
|
||||||
|
case "function-a": // Arm state
|
||||||
|
$('.mode_color-6-0').show(); // disarmed
|
||||||
|
$('.mode_color-6-1').show(); // armed
|
||||||
|
break;
|
||||||
|
case "function-h": // Channel
|
||||||
|
$('.special_colors').hide();
|
||||||
|
$('.channel_info').show();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "function-r": // Ring
|
||||||
|
default:
|
||||||
|
$('.special_colors').hide();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,30 +842,19 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function unselectOverlays(letter) {
|
function unselectOverlays(letter) {
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
// MSP 1.20
|
||||||
if (letter == 'b' || letter == 'r') {
|
if (letter == 'r' || letter == '') {
|
||||||
unselectOverlay(letter, 'i');
|
unselectOverlay(letter, 'o');
|
||||||
}
|
unselectOverlay(letter, 'b');
|
||||||
if (letter == 'b' || letter == 'r' || letter == 'l' || letter == 'g') {
|
unselectOverlay(letter, 'n');
|
||||||
unselectOverlay(letter, 'w');
|
unselectOverlay(letter, 't');
|
||||||
unselectOverlay(letter, 't');
|
}
|
||||||
unselectOverlay(letter, 's');
|
if (letter == 'l' || letter == 'g' || letter == 's') {
|
||||||
}
|
unselectOverlay(letter, 'w');
|
||||||
} else {
|
unselectOverlay(letter, 't');
|
||||||
// MSP 1.20
|
unselectOverlay(letter, 'o');
|
||||||
if (letter == 'r' || letter == '') {
|
unselectOverlay(letter, 'b');
|
||||||
unselectOverlay(letter, 'o');
|
unselectOverlay(letter, 'n');
|
||||||
unselectOverlay(letter, 'b');
|
|
||||||
unselectOverlay(letter, 'n');
|
|
||||||
unselectOverlay(letter, 't');
|
|
||||||
}
|
|
||||||
if (letter == 'l' || letter == 'g' || letter == 's') {
|
|
||||||
unselectOverlay(letter, 'w');
|
|
||||||
unselectOverlay(letter, 't');
|
|
||||||
unselectOverlay(letter, 'o');
|
|
||||||
unselectOverlay(letter, 'b');
|
|
||||||
unselectOverlay(letter, 'n');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1543,11 +1543,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
// * @param {Object=} opt_options Control options.
|
// * @param {Object=} opt_options Control options.
|
||||||
// */
|
// */
|
||||||
app.PlannerMultiMissionControl = function (opt_options) {
|
app.PlannerMultiMissionControl = function (opt_options) {
|
||||||
let versionCheck = true;
|
|
||||||
if (CONFIG !== undefined && !semver.gte(CONFIG.flightControllerVersion, "4.0.0")) {
|
|
||||||
versionCheck = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var options = opt_options || {};
|
var options = opt_options || {};
|
||||||
var button = document.createElement('button');
|
var button = document.createElement('button');
|
||||||
|
|
||||||
|
@ -1555,9 +1551,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
button.style = 'background: url(\'../images/icons/cf_icon_multimission_white.svg\') no-repeat 1px -1px;background-color: rgba(0,60,136,.5);';
|
button.style = 'background: url(\'../images/icons/cf_icon_multimission_white.svg\') no-repeat 1px -1px;background-color: rgba(0,60,136,.5);';
|
||||||
|
|
||||||
var handleShowSettings = function () {
|
var handleShowSettings = function () {
|
||||||
if (versionCheck) {
|
$('#missionPlannerMultiMission').fadeIn(300);
|
||||||
$('#missionPlannerMultiMission').fadeIn(300);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
button.addEventListener('click', handleShowSettings, false);
|
button.addEventListener('click', handleShowSettings, false);
|
||||||
|
@ -1566,7 +1560,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var element = document.createElement('div');
|
var element = document.createElement('div');
|
||||||
element.className = 'mission-control-multimission ol-unselectable ol-control';
|
element.className = 'mission-control-multimission ol-unselectable ol-control';
|
||||||
element.appendChild(button);
|
element.appendChild(button);
|
||||||
element.title = versionCheck ? 'MP MultiMission' : 'Unavailable';
|
element.title = 'MP MultiMission';
|
||||||
|
|
||||||
ol.control.Control.call(this, {
|
ol.control.Control.call(this, {
|
||||||
element: element,
|
element: element,
|
||||||
|
|
193
tabs/osd.js
193
tabs/osd.js
|
@ -397,11 +397,8 @@ function osdMainBatteryPreview() {
|
||||||
if (Settings.getInputValue('osd_main_voltage_decimals') == 2) {
|
if (Settings.getInputValue('osd_main_voltage_decimals') == 2) {
|
||||||
s += '3';
|
s += '3';
|
||||||
}
|
}
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
|
||||||
s += 'V';
|
s += FONT.symbol(SYM.VOLT);
|
||||||
} else {
|
|
||||||
s += FONT.symbol(SYM.VOLT);
|
|
||||||
}
|
|
||||||
return FONT.symbol(SYM.BATT) + FONT.embed_dot(s);
|
return FONT.symbol(SYM.BATT) + FONT.embed_dot(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -781,28 +778,14 @@ OSD.constants = {
|
||||||
name: 'REMAINING_FLIGHT_DISTANCE',
|
name: 'REMAINING_FLIGHT_DISTANCE',
|
||||||
id: 49,
|
id: 49,
|
||||||
preview: function(osd_data) {
|
preview: function(osd_data) {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
switch (OSD.data.preferences.units) {
|
||||||
switch (OSD.data.preferences.units) {
|
case 0: // Imperial
|
||||||
case 0: // Imperial
|
case 3: // UK
|
||||||
case 3: // UK
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
case 4: // GA
|
||||||
case 4: // GA
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
default: // Metric
|
||||||
default:
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.73') + FONT.symbol(SYM.DIST_KM);
|
||||||
// Metric
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_KM) + FONT.embed_dot('1.57');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
switch (OSD.data.preferences.units) {
|
|
||||||
case 0: // Imperial
|
|
||||||
case 3: // UK
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
|
||||||
case 4: // GA
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
|
||||||
default: // Metric
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.73') + FONT.symbol(SYM.DIST_KM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1082,24 +1065,13 @@ OSD.constants = {
|
||||||
name: 'ALTITUDE',
|
name: 'ALTITUDE',
|
||||||
id: 15,
|
id: 15,
|
||||||
preview: function () {
|
preview: function () {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
switch (OSD.data.preferences.units) {
|
||||||
switch (OSD.data.preferences.units) {
|
case 0: // Imperial
|
||||||
case 0: // Imperial
|
case 3: // UK
|
||||||
case 3: // UK
|
case 4: // GA
|
||||||
case 4: // GA
|
return ' 375' + FONT.symbol(SYM.ALT_FT);
|
||||||
return FONT.symbol(SYM.ALT_FT) + '375';
|
default: // Metric
|
||||||
default: // Metric
|
return ' 114' + FONT.symbol(SYM.ALT_M);
|
||||||
return FONT.symbol(SYM.ALT_M) + '114'
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (OSD.data.preferences.units) {
|
|
||||||
case 0: // Imperial
|
|
||||||
case 3: // UK
|
|
||||||
case 4: // GA
|
|
||||||
return ' 375' + FONT.symbol(SYM.ALT_FT);
|
|
||||||
default: // Metric
|
|
||||||
return ' 114' + FONT.symbol(SYM.ALT_M);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1237,55 +1209,35 @@ OSD.constants = {
|
||||||
name: 'CURRENT_DRAW',
|
name: 'CURRENT_DRAW',
|
||||||
id: 11,
|
id: 11,
|
||||||
preview: function() {
|
preview: function() {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
return FONT.embed_dot('42.1') + FONT.symbol(SYM.AMP);
|
||||||
return FONT.symbol(SYM.AMP) + FONT.embed_dot('42.1');
|
|
||||||
} else {
|
|
||||||
return FONT.embed_dot('42.1') + FONT.symbol(SYM.AMP);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'MAH_DRAWN',
|
name: 'MAH_DRAWN',
|
||||||
id: 12,
|
id: 12,
|
||||||
preview: function() {
|
preview: function() {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
return '1034' + FONT.symbol(SYM.MAH); // 4 chars
|
||||||
return FONT.symbol(SYM.MAH) + '690 '; // 4 chars
|
|
||||||
} else {
|
|
||||||
return '1034' + FONT.symbol(SYM.MAH); // 4 chars
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'WH_DRAWN',
|
name: 'WH_DRAWN',
|
||||||
id: 36,
|
id: 36,
|
||||||
preview: function() {
|
preview: function() {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
return FONT.embed_dot('1.25') + FONT.symbol(SYM.WH);
|
||||||
return FONT.symbol(SYM.WH) + FONT.embed_dot('1.25');
|
|
||||||
} else {
|
|
||||||
return FONT.embed_dot('1.25') + FONT.symbol(SYM.WH);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'POWER',
|
name: 'POWER',
|
||||||
id: 19,
|
id: 19,
|
||||||
preview: function() {
|
preview: function() {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
return ' 69' + FONT.symbol(SYM.WATT); // 3 chars
|
||||||
return FONT.symbol(SYM.WATT) + '50 '; // 3 chars
|
|
||||||
} else {
|
|
||||||
return ' 69' + FONT.symbol(SYM.WATT); // 3 chars
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'MAIN_BATT_REMAINING_CAPACITY',
|
name: 'MAIN_BATT_REMAINING_CAPACITY',
|
||||||
id: 37,
|
id: 37,
|
||||||
preview: function() {
|
preview: function() {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
return '1276' + FONT.symbol(SYM.MAH); // 4 chars
|
||||||
return FONT.symbol(SYM.MAH) + '690 '; // 4 chars
|
|
||||||
} else {
|
|
||||||
return '1276' + FONT.symbol(SYM.MAH); // 4 chars
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1350,24 +1302,13 @@ OSD.constants = {
|
||||||
name: 'MSL_ALTITUDE',
|
name: 'MSL_ALTITUDE',
|
||||||
id: 96,
|
id: 96,
|
||||||
preview: function(osd_data) {
|
preview: function(osd_data) {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
switch (OSD.data.preferences.units) {
|
||||||
switch (OSD.data.preferences.units) {
|
case 0: // Imperial
|
||||||
case 0: // Imperial
|
case 3: // UK
|
||||||
case 3: // UK
|
case 4: // GA
|
||||||
case 4: // GA
|
return ' 375' + FONT.symbol(SYM.ALT_FT);
|
||||||
return FONT.symbol(SYM.ALT_FT) + '375';
|
default: // Metric
|
||||||
default: // Metric
|
return ' 114' + FONT.symbol(SYM.ALT_M);
|
||||||
return FONT.symbol(SYM.ALT_M) + '114';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (OSD.data.preferences.units) {
|
|
||||||
case 0: // Imperial
|
|
||||||
case 3: // UK
|
|
||||||
case 4: // GA
|
|
||||||
return ' 375' + FONT.symbol(SYM.ALT_FT);
|
|
||||||
default: // Metric
|
|
||||||
return ' 114' + FONT.symbol(SYM.ALT_M);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1483,26 +1424,14 @@ OSD.constants = {
|
||||||
name: 'DISTANCE_TO_HOME',
|
name: 'DISTANCE_TO_HOME',
|
||||||
id: 23,
|
id: 23,
|
||||||
preview: function(osd_data) {
|
preview: function(osd_data) {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
switch (OSD.data.preferences.units) {
|
||||||
switch (OSD.data.preferences.units) {
|
case 0: // Imperial
|
||||||
case 0: // Imperial
|
case 3: // UK
|
||||||
case 3: // UK
|
return FONT.symbol(SYM.HOME) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
||||||
return FONT.symbol(SYM.HOME) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
case 4: // GA
|
||||||
case 4: // GA
|
return FONT.symbol(SYM.HOME) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
||||||
return FONT.symbol(SYM.HOME) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
default: // Metric
|
||||||
default: // Metric
|
return FONT.symbol(SYM.HOME) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
||||||
return FONT.symbol(SYM.HOME) + FONT.symbol(SYM.DIST_KM) + FONT.embed_dot('1.57');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (OSD.data.preferences.units) {
|
|
||||||
case 0: // Imperial
|
|
||||||
case 3: // UK
|
|
||||||
return FONT.symbol(SYM.HOME) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
|
||||||
case 4: // GA
|
|
||||||
return FONT.symbol(SYM.HOME) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
|
||||||
default: // Metric
|
|
||||||
return FONT.symbol(SYM.HOME) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1511,26 +1440,14 @@ OSD.constants = {
|
||||||
id: 40,
|
id: 40,
|
||||||
min_version: '1.9.1',
|
min_version: '1.9.1',
|
||||||
preview: function(osd_data) {
|
preview: function(osd_data) {
|
||||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
switch (OSD.data.preferences.units) {
|
||||||
switch (OSD.data.preferences.units) {
|
case 0: // Imperial
|
||||||
case 0: // Imperial
|
case 3: // UK
|
||||||
case 3: // UK
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
case 4: // GA
|
||||||
case 4: // GA
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
default: // Metric
|
||||||
default: // Metric
|
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_KM) + FONT.embed_dot('1.57');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (OSD.data.preferences.units) {
|
|
||||||
case 0: // Imperial
|
|
||||||
case 3: // UK
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.98') + FONT.symbol(SYM.DIST_MI);
|
|
||||||
case 4: // GA
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('0.85') + FONT.symbol(SYM.DIST_NM);
|
|
||||||
default: // Metric
|
|
||||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2117,12 +2034,10 @@ OSD.msp = {
|
||||||
result.push16(OSD.data.alarms.max_altitude);
|
result.push16(OSD.data.alarms.max_altitude);
|
||||||
result.push16(OSD.data.alarms.dist);
|
result.push16(OSD.data.alarms.dist);
|
||||||
result.push16(OSD.data.alarms.max_neg_altitude);
|
result.push16(OSD.data.alarms.max_neg_altitude);
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, '2.2.0')) {
|
result.push16(OSD.data.alarms.gforce);
|
||||||
result.push16(OSD.data.alarms.gforce);
|
result.push16(OSD.data.alarms.gforce_axis_min);
|
||||||
result.push16(OSD.data.alarms.gforce_axis_min);
|
result.push16(OSD.data.alarms.gforce_axis_max);
|
||||||
result.push16(OSD.data.alarms.gforce_axis_max);
|
result.push8(OSD.data.alarms.current);
|
||||||
result.push8(OSD.data.alarms.current);
|
|
||||||
}
|
|
||||||
result.push16(OSD.data.alarms.imu_temp_alarm_min);
|
result.push16(OSD.data.alarms.imu_temp_alarm_min);
|
||||||
result.push16(OSD.data.alarms.imu_temp_alarm_max);
|
result.push16(OSD.data.alarms.imu_temp_alarm_max);
|
||||||
result.push16(OSD.data.alarms.baro_temp_alarm_min);
|
result.push16(OSD.data.alarms.baro_temp_alarm_min);
|
||||||
|
@ -2138,12 +2053,10 @@ OSD.msp = {
|
||||||
OSD.data.alarms.max_altitude = alarms.readU16();
|
OSD.data.alarms.max_altitude = alarms.readU16();
|
||||||
OSD.data.alarms.dist = alarms.readU16();
|
OSD.data.alarms.dist = alarms.readU16();
|
||||||
OSD.data.alarms.max_neg_altitude = alarms.readU16();
|
OSD.data.alarms.max_neg_altitude = alarms.readU16();
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, '2.2.0')) {
|
OSD.data.alarms.gforce = alarms.readU16();
|
||||||
OSD.data.alarms.gforce = alarms.readU16();
|
OSD.data.alarms.gforce_axis_min = alarms.read16();
|
||||||
OSD.data.alarms.gforce_axis_min = alarms.read16();
|
OSD.data.alarms.gforce_axis_max = alarms.read16();
|
||||||
OSD.data.alarms.gforce_axis_max = alarms.read16();
|
OSD.data.alarms.current = alarms.readU8();
|
||||||
OSD.data.alarms.current = alarms.readU8();
|
|
||||||
}
|
|
||||||
OSD.data.alarms.imu_temp_alarm_min = alarms.read16();
|
OSD.data.alarms.imu_temp_alarm_min = alarms.read16();
|
||||||
OSD.data.alarms.imu_temp_alarm_max = alarms.read16();
|
OSD.data.alarms.imu_temp_alarm_max = alarms.read16();
|
||||||
OSD.data.alarms.baro_temp_alarm_min = alarms.read16();
|
OSD.data.alarms.baro_temp_alarm_min = alarms.read16();
|
||||||
|
|
|
@ -54,14 +54,14 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="throttle_idle-info" class="info-box"></div>
|
<div id="throttle_idle-info" class="info-box"></div>
|
||||||
<div class="number requires-v2_4">
|
<div class="number">
|
||||||
<input id="throttle_idle" data-setting="throttle_idle" type="number" data-step="1.0" />
|
<input id="throttle_idle" data-setting="throttle_idle" type="number" data-step="1.0" />
|
||||||
<label for="throttle_idle">
|
<label for="throttle_idle">
|
||||||
<span data-i18n="throttleIdle"></span>
|
<span data-i18n="throttleIdle"></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="number requires-v2_4">
|
<div class="number">
|
||||||
<input id="motor_poles" data-setting="motor_poles" type="number" />
|
<input id="motor_poles" data-setting="motor_poles" type="number" />
|
||||||
<label for="motor_poles">
|
<label for="motor_poles">
|
||||||
<span data-i18n="motor_poles"></span>
|
<span data-i18n="motor_poles"></span>
|
||||||
|
|
|
@ -70,12 +70,6 @@ TABS.outputs.initialize = function (callback) {
|
||||||
process_servos();
|
process_servos();
|
||||||
processConfiguration();
|
processConfiguration();
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.4.0")) {
|
|
||||||
$('.requires-v2_4').show();
|
|
||||||
} else {
|
|
||||||
$('.requires-v2_4').hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
finalize();
|
finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
tabs/pid_tuning.html
Executable file → Normal file
6
tabs/pid_tuning.html
Executable file → Normal file
|
@ -302,9 +302,9 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="clear-both requires-v2_4"></div>
|
<div class="clear-both"></div>
|
||||||
<div class="tab_subtitle requires-v2_4" data-i18n="pidTuning_rpmFilters" style="margin-top: 1em;"></div>
|
<div class="tab_subtitle" data-i18n="pidTuning_rpmFilters" style="margin-top: 1em;"></div>
|
||||||
<div class="cf_column requires-v2_4">
|
<div class="cf_column">
|
||||||
<table class="settings-table settings-table--filtering">
|
<table class="settings-table settings-table--filtering">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
14
tabs/pid_tuning.js
Executable file → Normal file
14
tabs/pid_tuning.js
Executable file → Normal file
|
@ -117,20 +117,6 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
$('th.feedforward').attr('title', chrome.i18n.getMessage('pidTuning_ControlDerivative'));
|
$('th.feedforward').attr('title', chrome.i18n.getMessage('pidTuning_ControlDerivative'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.4.0")) {
|
|
||||||
$('.requires-v2_4').show();
|
|
||||||
} else {
|
|
||||||
$('.requires-v2_4').hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (semver.gte(CONFIG.flightControllerVersion, "2.6.0")) {
|
|
||||||
$('.requires-v2_6').show();
|
|
||||||
$('.hides-v2_6').hide();
|
|
||||||
} else {
|
|
||||||
$('.requires-v2_6').hide();
|
|
||||||
$('.hides-v2_6').show();
|
|
||||||
}
|
|
||||||
|
|
||||||
helper.tabs.init($('.tab-pid_tuning'));
|
helper.tabs.init($('.tab-pid_tuning'));
|
||||||
helper.features.updateUI($('.tab-pid_tuning'), FEATURES);
|
helper.features.updateUI($('.tab-pid_tuning'), FEATURES);
|
||||||
|
|
||||||
|
|
|
@ -131,15 +131,6 @@ TABS.ports.initialize = function (callback) {
|
||||||
'115200'
|
'115200'
|
||||||
];
|
];
|
||||||
|
|
||||||
var telemetryBaudRates_pre1_6_3 = [
|
|
||||||
'AUTO',
|
|
||||||
'9600',
|
|
||||||
'19200',
|
|
||||||
'38400',
|
|
||||||
'57600',
|
|
||||||
'115200'
|
|
||||||
];
|
|
||||||
|
|
||||||
var telemetryBaudRates_post1_6_3 = [
|
var telemetryBaudRates_post1_6_3 = [
|
||||||
'AUTO',
|
'AUTO',
|
||||||
'1200',
|
'1200',
|
||||||
|
@ -210,9 +201,8 @@ TABS.ports.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$elements = $('select.telemetry_baudrate');
|
$elements = $('select.telemetry_baudrate');
|
||||||
var telemetryBaudRates = semver.gte(CONFIG.flightControllerVersion, "1.6.3") ? telemetryBaudRates_post1_6_3 : telemetryBaudRates_pre1_6_3;
|
for (i = 0; i < telemetryBaudRates_post1_6_3.length; i++) {
|
||||||
for (i = 0; i < telemetryBaudRates.length; i++) {
|
$elements.append('<option value="' + telemetryBaudRates_post1_6_3[i] + '">' + telemetryBaudRates_post1_6_3[i] + '</option>');
|
||||||
$elements.append('<option value="' + telemetryBaudRates[i] + '">' + telemetryBaudRates[i] + '</option>');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$elements = $('select.blackbox_baudrate');
|
$elements = $('select.blackbox_baudrate');
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
<div class="tab-transponder toolbar_fixed_bottom">
|
|
||||||
<div class="content_wrapper">
|
|
||||||
<div class="tab_title" i18n="tabTransponder">Transponder</div>
|
|
||||||
<div class="require-transponder-unsupported note">
|
|
||||||
<div class="note_spacer">
|
|
||||||
<p i18n="transponderNotSupported"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="require-transponder-supported">
|
|
||||||
|
|
||||||
<div class="note" style="margin-bottom: 20px;">
|
|
||||||
<div class="note_spacer">
|
|
||||||
<p i18n="transponderHelp"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="gui_box grey">
|
|
||||||
<div class="gui_box_titlebar">
|
|
||||||
<div class="spacer_box_title" i18n="transponderConfiguration"></div>
|
|
||||||
</div>
|
|
||||||
<div class="spacer_box">
|
|
||||||
<div class="text transponderData">
|
|
||||||
<div class="textspacer" >
|
|
||||||
<input type="text" name="data" spellcheck="false"/>
|
|
||||||
</div>
|
|
||||||
<label for="failsafe_feature_new"><span i18n="transponderData"></span>
|
|
||||||
</label>
|
|
||||||
<div class="helpicon cf_tip" i18n_title="transponderDataHelp"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clear-both"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="note">
|
|
||||||
<div class="note_spacer">
|
|
||||||
<p i18n="transponderInformation"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="content_toolbar require-transponder-supported">
|
|
||||||
<div class="btn save_btn">
|
|
||||||
<a class="save" href="#" i18n="transponderButtonSave"></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,101 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
TABS.transponder = {
|
|
||||||
available: false
|
|
||||||
};
|
|
||||||
|
|
||||||
TABS.transponder.initialize = function (callback, scrollPosition) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (GUI.active_tab != 'transponder') {
|
|
||||||
GUI.active_tab = 'transponder';
|
|
||||||
googleAnalytics.sendAppView('Transponder');
|
|
||||||
}
|
|
||||||
|
|
||||||
// transponder supported added in MSP API Version 1.16.0
|
|
||||||
TABS.transponder.available = semver.gte(CONFIG.apiVersion, "1.16.0");
|
|
||||||
|
|
||||||
if (!TABS.transponder.available) {
|
|
||||||
load_html();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function load_html() {
|
|
||||||
GUI.load("./tabs/transponder.html", process_html);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the transponder data and a flag to see if transponder support is enabled on the FC
|
|
||||||
MSP.send_message(MSPCodes.MSP_TRANSPONDER_CONFIG, false, false, load_html);
|
|
||||||
|
|
||||||
// Convert a hex string to a byte array
|
|
||||||
function hexToBytes(hex) {
|
|
||||||
for (var bytes = [], c = 0; c < hex.length; c += 2)
|
|
||||||
bytes.push(~parseInt(hex.substr(c, 2), 16));
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
function pad(n, width) {
|
|
||||||
n = n + '';
|
|
||||||
return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert a byte array to a hex string
|
|
||||||
function bytesToHex(bytes) {
|
|
||||||
for (var hex = [], i = 0; i < bytes.length; i++) {
|
|
||||||
hex.push(pad(((~bytes[i]) & 0xFF).toString(16),2));
|
|
||||||
}
|
|
||||||
return hex.join("").toUpperCase();
|
|
||||||
}
|
|
||||||
function process_html() {
|
|
||||||
// translate to user-selected language
|
|
||||||
localize();
|
|
||||||
|
|
||||||
$(".tab-transponder")
|
|
||||||
.toggleClass("transponder-supported", TABS.transponder.available && TRANSPONDER.supported);
|
|
||||||
|
|
||||||
if (TABS.transponder.available) {
|
|
||||||
|
|
||||||
var data = bytesToHex(TRANSPONDER.data);
|
|
||||||
|
|
||||||
$('input[name="data"]').val(data);
|
|
||||||
$('input[name="data"]').prop('maxLength', data.length);
|
|
||||||
|
|
||||||
$('a.save').click(function () {
|
|
||||||
|
|
||||||
|
|
||||||
// gather data that doesn't have automatic change event bound
|
|
||||||
|
|
||||||
var dataString = $('input[name="data"]').val();
|
|
||||||
var expectedLength = TRANSPONDER.data.length;
|
|
||||||
var hexRegExp = new RegExp('[0-9a-fA-F]{' + (expectedLength * 2) + '}', 'gi');
|
|
||||||
if (!dataString.match(hexRegExp)) {
|
|
||||||
GUI.log(chrome.i18n.getMessage('transponderDataInvalid'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TRANSPONDER.data = hexToBytes(dataString);
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// send data to FC
|
|
||||||
//
|
|
||||||
function save_transponder_config() {
|
|
||||||
MSP.send_message(MSPCodes.MSP_SET_TRANSPONDER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_TRANSPONDER_CONFIG), false, save_to_eeprom);
|
|
||||||
}
|
|
||||||
function save_to_eeprom() {
|
|
||||||
MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, function () {
|
|
||||||
GUI.log(chrome.i18n.getMessage('transponderEepromSaved'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
save_transponder_config();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
GUI.content_ready(callback);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TABS.transponder.cleanup = function (callback) {
|
|
||||||
if (callback) callback();
|
|
||||||
};
|
|
Loading…
Add table
Add a link
Reference in a new issue