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.
|
||||
|
||||
# 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?
|
||||
|
||||
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. 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
|
||||
|
||||
**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)
|
||||
## Building and running INAV Configurator locally (for development or Linux users)
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
|
@ -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. 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
|
||||
|
||||
### 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
|
||||
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
|
||||
|
||||
For INAV configurator issues raise them here
|
||||
|
@ -144,8 +141,3 @@ https://github.com/iNavFlight/inav/issues
|
|||
## Developers
|
||||
|
||||
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": {
|
||||
"message": "Failsafe"
|
||||
},
|
||||
"tabTransponder": {
|
||||
"message": "Race Transponder"
|
||||
},
|
||||
"tabGPS": {
|
||||
"message": "GPS"
|
||||
},
|
||||
|
@ -681,12 +678,6 @@
|
|||
"featureCHANNEL_FORWARDING": {
|
||||
"message": "Forward aux channels to servo outputs"
|
||||
},
|
||||
"featureTRANSPONDER": {
|
||||
"message": "Race Transponder"
|
||||
},
|
||||
"featureTRANSPONDERTip": {
|
||||
"message": "Configure via the Race Transponder tab after enabling."
|
||||
},
|
||||
"featureSOFTSPI": {
|
||||
"message": "CPU based SPI"
|
||||
},
|
||||
|
@ -1710,33 +1701,6 @@
|
|||
"programmingEepromSaved": {
|
||||
"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": {
|
||||
"message": "Change Direction in TX To Match"
|
||||
},
|
||||
|
|
173
js/fc.js
173
js/fc.js
|
@ -38,7 +38,6 @@ var CONFIG,
|
|||
DATAFLASH,
|
||||
SDCARD,
|
||||
BLACKBOX,
|
||||
TRANSPONDER,
|
||||
RC_deadband,
|
||||
SENSOR_ALIGNMENT,
|
||||
RX_CONFIG,
|
||||
|
@ -77,14 +76,11 @@ var FC = {
|
|||
return (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER);
|
||||
},
|
||||
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 () {
|
||||
return true; // Currently all platforms use D term
|
||||
},
|
||||
isCdComponentUsed: function () {
|
||||
return (MIXER_CONFIG.platformType == PLATFORM_MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM_TRICOPTER);
|
||||
},
|
||||
resetState: function () {
|
||||
SENSOR_STATUS = {
|
||||
isHardwareHealthy: 0,
|
||||
|
@ -252,23 +248,6 @@ var FC = {
|
|||
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();
|
||||
|
||||
ANALOG = {
|
||||
|
@ -479,11 +458,6 @@ var FC = {
|
|||
blackboxRateDenom: 1
|
||||
};
|
||||
|
||||
TRANSPONDER = {
|
||||
supported: false,
|
||||
data: []
|
||||
};
|
||||
|
||||
RC_deadband = {
|
||||
deadband: 0,
|
||||
yaw_deadband: 0,
|
||||
|
@ -601,10 +575,6 @@ var FC = {
|
|||
{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();
|
||||
},
|
||||
isFeatureEnabled: function (featureName, features) {
|
||||
|
@ -664,8 +634,6 @@ var FC = {
|
|||
];
|
||||
},
|
||||
getEscProtocols: function () {
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
|
||||
return {
|
||||
0: {
|
||||
name: "STANDARD",
|
||||
|
@ -729,103 +697,6 @@ var FC = {
|
|||
}
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
0: {
|
||||
name: "STANDARD",
|
||||
message: null,
|
||||
defaultRate: 400,
|
||||
rates: {
|
||||
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"
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
getServoRates: function () {
|
||||
return {
|
||||
|
@ -866,37 +737,6 @@ var FC = {
|
|||
getOsdDisabledFields: function () {
|
||||
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 () {
|
||||
return {
|
||||
0: "OK_TO_ARM",
|
||||
|
@ -933,7 +773,7 @@ var FC = {
|
|||
]
|
||||
},
|
||||
getPidNames: function () {
|
||||
let list = [
|
||||
return [
|
||||
'Roll',
|
||||
'Pitch',
|
||||
'Yaw',
|
||||
|
@ -943,14 +783,9 @@ var FC = {
|
|||
'Surface',
|
||||
'Level',
|
||||
'Heading Hold',
|
||||
'Velocity Z'
|
||||
'Velocity Z',
|
||||
'Nav Heading'
|
||||
];
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, '2.5.0')) {
|
||||
list.push("Nav Heading")
|
||||
}
|
||||
|
||||
return list;
|
||||
},
|
||||
getRthAltControlMode: function () {
|
||||
return ["Current", "Extra", "Fixed", "Max", "At least", "At least, linear descent"];
|
||||
|
|
|
@ -18,7 +18,6 @@ var GUI_control = function () {
|
|||
];
|
||||
this.defaultAllowedTabsWhenConnected = [
|
||||
'failsafe',
|
||||
'transponder',
|
||||
'adjustments',
|
||||
'auxiliary',
|
||||
'cli',
|
||||
|
|
|
@ -72,7 +72,7 @@ var MSP = {
|
|||
|
||||
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
|
||||
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
|
||||
|
||||
last_received_timestamp: null,
|
||||
|
|
|
@ -64,8 +64,6 @@ var MSPCodes = {
|
|||
MSP_SDCARD_SUMMARY: 79,
|
||||
MSP_BLACKBOX_CONFIG: 80,
|
||||
MSP_SET_BLACKBOX_CONFIG: 81,
|
||||
MSP_TRANSPONDER_CONFIG: 82,
|
||||
MSP_SET_TRANSPONDER_CONFIG: 83,
|
||||
MSP_OSD_CONFIG: 84,
|
||||
MSP_SET_OSD_CONFIG: 85,
|
||||
MSP_OSD_CHAR_READ: 86,
|
||||
|
@ -107,7 +105,7 @@ var MSPCodes = {
|
|||
MSP_RC_DEADBAND: 125,
|
||||
MSP_SENSOR_ALIGNMENT: 126,
|
||||
MSP_LED_STRIP_MODECOLOR:127,
|
||||
MSP_STATUS_EX: 150,
|
||||
MSP_STATUS_EX: 150, // Deprecated, do not use.
|
||||
MSP_SENSOR_STATUS: 151,
|
||||
|
||||
MSP_SET_RAW_RC: 200,
|
||||
|
|
|
@ -68,27 +68,6 @@ var mspHelper = (function (gui) {
|
|||
colorCount,
|
||||
color;
|
||||
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:
|
||||
CONFIG.cycleTime = data.getUint16(offset, true);
|
||||
offset += 2;
|
||||
|
@ -125,12 +104,7 @@ var mspHelper = (function (gui) {
|
|||
SENSOR_STATUS.rangeHwStatus = data.getUint8(6);
|
||||
SENSOR_STATUS.speedHwStatus = data.getUint8(7);
|
||||
SENSOR_STATUS.flowHwStatus = data.getUint8(8);
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
|
||||
SENSOR_STATUS.imu2HwStatus = data.getUint8(9);
|
||||
} else {
|
||||
SENSOR_STATUS.imu2HwStatus = 0;
|
||||
}
|
||||
sensor_status_ex(SENSOR_STATUS);
|
||||
break;
|
||||
|
||||
|
@ -1128,17 +1102,6 @@ var mspHelper = (function (gui) {
|
|||
case MSPCodes.MSP_SET_BLACKBOX_CONFIG:
|
||||
console.log("Blackbox config saved");
|
||||
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:
|
||||
VTX_CONFIG.device_type = data.getUint8(offset++);
|
||||
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.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.Y = data.getInt16(23, true);
|
||||
CALIBRATION_DATA.magGain.Z = data.getInt16(25, true);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
@ -1520,7 +1481,7 @@ var mspHelper = (function (gui) {
|
|||
|
||||
// fire 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;
|
||||
}
|
||||
|
@ -1772,12 +1733,6 @@ var mspHelper = (function (gui) {
|
|||
buffer.push(FAILSAFE_CONFIG.failsafe_min_distance_procedure);
|
||||
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:
|
||||
for (i = 0; i < SERVO_CONFIG.length; i++) {
|
||||
var out = SERVO_CONFIG[i].indexOfChannelToForward;
|
||||
|
@ -1925,7 +1880,6 @@ var mspHelper = (function (gui) {
|
|||
buffer.push(lowByte(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(highByte(CALIBRATION_DATA.magGain.X));
|
||||
|
||||
|
@ -1934,7 +1888,6 @@ var mspHelper = (function (gui) {
|
|||
|
||||
buffer.push(lowByte(CALIBRATION_DATA.magGain.Z));
|
||||
buffer.push(highByte(CALIBRATION_DATA.magGain.Z));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
@ -2328,9 +2281,7 @@ var mspHelper = (function (gui) {
|
|||
|
||||
buffer.push(conditionIndex);
|
||||
buffer.push(condition.getEnabled());
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
||||
buffer.push(condition.getActivatorId());
|
||||
}
|
||||
buffer.push(condition.getOperation());
|
||||
buffer.push(condition.getOperandAType());
|
||||
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
|
||||
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
|
||||
|
||||
*/
|
||||
|
@ -2714,10 +2665,6 @@ var mspHelper = (function (gui) {
|
|||
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) {
|
||||
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);
|
||||
};
|
||||
|
||||
self.loadStatus = function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP_STATUS, false, false, callback);
|
||||
};
|
||||
|
||||
self.loadFeatures = function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP_FEATURE, false, false, 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);
|
||||
};
|
||||
|
||||
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) {
|
||||
MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, callback);
|
||||
};
|
||||
|
@ -2999,7 +2938,7 @@ var mspHelper = (function (gui) {
|
|||
|
||||
function nextSafehome() {
|
||||
safehomeId++;
|
||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount()-1) {
|
||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount() - 1) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SAFEHOME, [safehomeId], false, nextSafehome);
|
||||
}
|
||||
else {
|
||||
|
@ -3014,7 +2953,7 @@ var mspHelper = (function (gui) {
|
|||
|
||||
function nextSendSafehome() {
|
||||
safehomeId++;
|
||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount()-1) {
|
||||
if (safehomeId < SAFEHOMES.getMaxSafehomeCount() - 1) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_SET_SAFEHOME, SAFEHOMES.extractBuffer(safehomeId), false, nextSendSafehome);
|
||||
}
|
||||
else {
|
||||
|
@ -3043,9 +2982,7 @@ var mspHelper = (function (gui) {
|
|||
var setting = {};
|
||||
|
||||
// Discard setting name
|
||||
if (semver.gte(CONFIG.apiVersion, "2.4.0")) {
|
||||
result.data.readString();
|
||||
}
|
||||
|
||||
// Discard PG ID
|
||||
result.data.readU16();
|
||||
|
@ -3073,7 +3010,7 @@ var mspHelper = (function (gui) {
|
|||
for (var ii = setting.min; ii <= setting.max; ii++) {
|
||||
values.push(result.data.readString());
|
||||
}
|
||||
setting.table = {values: values};
|
||||
setting.table = { values: values };
|
||||
}
|
||||
SETTINGS[name] = setting;
|
||||
return setting;
|
||||
|
@ -3128,7 +3065,7 @@ var mspHelper = (function (gui) {
|
|||
default:
|
||||
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);
|
||||
};
|
||||
|
||||
self.getCraftName = function(callback) {
|
||||
MSP.send_message(MSPCodes.MSP_NAME, false, false, function(resp) {
|
||||
self.getCraftName = function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP_NAME, false, false, function (resp) {
|
||||
var name = resp.data.readString();
|
||||
if (callback) {
|
||||
callback(name);
|
||||
|
@ -3226,7 +3163,7 @@ var mspHelper = (function (gui) {
|
|||
});
|
||||
};
|
||||
|
||||
self.setCraftName = function(name, callback) {
|
||||
self.setCraftName = function (name, callback) {
|
||||
var data = [];
|
||||
name = name || "";
|
||||
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);
|
||||
};
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
self.loadBrakingConfig = function(callback) {
|
||||
self.loadBrakingConfig = function (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);
|
||||
};
|
||||
|
||||
self.loadParameterGroups = function(callback) {
|
||||
self.loadParameterGroups = function (callback) {
|
||||
MSP.send_message(MSPCodes.MSP2_COMMON_PG_LIST, false, false, function (resp) {
|
||||
var groups = [];
|
||||
while (resp.data.offset < resp.data.byteLength) {
|
||||
var id = resp.data.readU16();
|
||||
var start = 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) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -3283,19 +3220,11 @@ var mspHelper = (function (gui) {
|
|||
};
|
||||
|
||||
self.loadGlobalVariablesStatus = function (callback) {
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
||||
MSP.send_message(MSPCodes.MSP2_INAV_GVAR_STATUS, false, false, callback);
|
||||
} else {
|
||||
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);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
return self;
|
||||
|
|
|
@ -62,7 +62,7 @@ $(document).ready(function () {
|
|||
} else {
|
||||
|
||||
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
|
||||
GUI.log(chrome.i18n.getMessage('deviceReady'));
|
||||
//noinspection JSValidateTypes
|
||||
|
@ -334,12 +334,8 @@ function onConnect() {
|
|||
/*
|
||||
* Init PIDs bank with a length that depends on the version
|
||||
*/
|
||||
let pidCount;
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) {
|
||||
pidCount = 11;
|
||||
} else {
|
||||
pidCount = 10;
|
||||
}
|
||||
let pidCount = 11;
|
||||
|
||||
for (let i = 0; i < pidCount; i++) {
|
||||
PIDs.push(new Array(4));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
'use strict';
|
||||
|
||||
const GulpClient = require("gulp");
|
||||
|
||||
var Settings = (function () {
|
||||
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");
|
||||
}
|
||||
|
||||
.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 {
|
||||
background-image: url(../images/icons/cf_icon_cal_grey.svg);
|
||||
}
|
||||
|
|
|
@ -231,7 +231,6 @@
|
|||
<li class="tab_osd">
|
||||
<a href="#" data-i18n="tabOSD" class="tabicon ic_osd" title="OSD"></a>
|
||||
</li>
|
||||
<!--<li class="tab_transponder"><a href="#" data-i18n="tabTransponder" class="tabicon ic_transponder" title="Transponder"></a></li>-->
|
||||
<li class="tab_led_strip">
|
||||
<a href="#" data-i18n="tabLedStrip" class="tabicon ic_led" title="LED Strip"></a>
|
||||
</li>
|
||||
|
|
3
main.js
3
main.js
|
@ -230,9 +230,6 @@ $(document).ready(function () {
|
|||
case 'failsafe':
|
||||
TABS.failsafe.initialize(content_ready);
|
||||
break;
|
||||
case 'transponder':
|
||||
TABS.transponder.initialize(content_ready);
|
||||
break;
|
||||
case 'setup':
|
||||
TABS.setup.initialize(content_ready);
|
||||
break;
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
"jquery-ui-npm": "1.12.0",
|
||||
"marked": "^0.3.17",
|
||||
"minimist": "^1.2.0",
|
||||
"nw": "^0.61.0-sdk",
|
||||
"nw": "^0.61.0",
|
||||
"nw-dialog": "^1.0.7",
|
||||
"openlayers": "^4.6.5",
|
||||
"plotly": "^1.0.6",
|
||||
|
|
|
@ -6665,47 +6665,47 @@ MAX7456
|
|||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01010101
|
||||
01000101
|
||||
01010101
|
||||
01000101
|
||||
00100001
|
||||
01010101
|
||||
00100001
|
||||
00101000
|
||||
01010100
|
||||
10100001
|
||||
01001010
|
||||
00010010
|
||||
10000101
|
||||
01001010
|
||||
10001010
|
||||
10000101
|
||||
01010010
|
||||
10101010
|
||||
00010101
|
||||
01010010
|
||||
10101010
|
||||
00000000
|
||||
00010101
|
||||
01010100
|
||||
10101000
|
||||
01010101
|
||||
10101010
|
||||
10000101
|
||||
01010100
|
||||
10101000
|
||||
01010101
|
||||
01010101
|
||||
00100001
|
||||
01010101
|
||||
01010101
|
||||
00100001
|
||||
01010101
|
||||
01010101
|
||||
01000101
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10000000
|
||||
10000101
|
||||
01010100
|
||||
10101010
|
||||
10000101
|
||||
01010100
|
||||
10101010
|
||||
10000101
|
||||
01010101
|
||||
00000000
|
||||
00010101
|
||||
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);
|
||||
}
|
||||
|
||||
.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-r .overlay-color {
|
||||
float: left;
|
||||
|
@ -210,6 +216,7 @@
|
|||
.tab-led-strip .select .function-g { background: green;}
|
||||
/* .tab-led-strip .select .function-b { background: white; color:black;} */
|
||||
.tab-led-strip .select .function-r { background: #acacac;}
|
||||
.tab-led-strip .select .function-h { background: skyblue;}
|
||||
|
||||
.tab-led-strip .select .functionSelect option {
|
||||
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');
|
||||
}
|
||||
loadChainer.setChain([
|
||||
mspHelper.loadStatus,
|
||||
mspHelper.queryFcStatus,
|
||||
mspHelper.loadSensorConfig,
|
||||
mspHelper.loadCalibrationData
|
||||
]);
|
||||
|
|
|
@ -32,7 +32,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
var loadChain = [
|
||||
mspHelper.loadFeatures,
|
||||
mspHelper.loadArmingConfig,
|
||||
mspHelper.loadLoopTime,
|
||||
mspHelper.load3dConfig,
|
||||
mspHelper.loadSensorAlignment,
|
||||
mspHelper.loadAdvancedConfig,
|
||||
|
@ -56,7 +55,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
mspHelper.saveSensorAlignment,
|
||||
mspHelper.saveAccTrim,
|
||||
mspHelper.saveArmingConfig,
|
||||
mspHelper.saveLooptimeConfig,
|
||||
mspHelper.saveAdvancedConfig,
|
||||
mspHelper.saveINAVPidConfig,
|
||||
mspHelper.saveVTXConfig,
|
||||
|
@ -328,7 +326,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
|
||||
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('Board', 'Accelerometer', $('#sensor-acc').children("option:selected").text());
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<option value="function-s" class="extra_functions20">RSSI</option>
|
||||
<option value="function-g" class="extra_functions20">GPS</option>
|
||||
<option value="function-r" class="">Ring</option>
|
||||
<option value="function-h" class="channel_info">Channel</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
@ -105,6 +106,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="channel_info">
|
||||
<span class="color_section">Select Channel from color list</span>
|
||||
</div>
|
||||
|
||||
<div class="mode_colors">
|
||||
<div class="section">Mode colors</div>
|
||||
|
||||
|
|
|
@ -11,15 +11,9 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
var selectedColorIndex = 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'];
|
||||
TABS.led_strip.baseFuncs = ['c', 'f', 'a', 'b', 'g', 'r'];
|
||||
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.baseFuncs = ['c', 'f', 'a', 'l', 's', 'g', 'r', 'h'];
|
||||
TABS.led_strip.overlays = ['t', 'o', 'b', 'n', 'i', 'w'];
|
||||
}
|
||||
|
||||
TABS.led_strip.wireMode = false;
|
||||
|
||||
|
@ -37,16 +31,9 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
|
||||
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);
|
||||
else
|
||||
load_html();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function load_html() {
|
||||
GUI.load("./tabs/led_strip.html", process_html);
|
||||
}
|
||||
|
@ -74,9 +61,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
var theHTML = [];
|
||||
var theHTMLlength = 0;
|
||||
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-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(''));
|
||||
|
@ -549,10 +533,7 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
|
||||
function send_led_strip_mode_colors() {
|
||||
if (semver.gte(CONFIG.apiVersion, "1.19.0"))
|
||||
mspHelper.sendLedStripModeColors(save_to_eeprom);
|
||||
else
|
||||
save_to_eeprom();
|
||||
}
|
||||
|
||||
function save_to_eeprom() {
|
||||
|
@ -674,7 +655,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
|
||||
// refresh mode color buttons
|
||||
function setModeBackgroundColor(element) {
|
||||
if (semver.gte(CONFIG.apiVersion, "1.19.0")) {
|
||||
element.find('[class*="mode_color"]').each(function() {
|
||||
var m = 0;
|
||||
var d = 0;
|
||||
|
@ -687,7 +667,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function setBackgroundColor(element) {
|
||||
if (element.is('[class*="color"]')) {
|
||||
|
@ -713,16 +692,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
|
||||
function areOverlaysActive(activeFunction) {
|
||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
||||
switch (activeFunction) {
|
||||
case "function-c":
|
||||
case "function-a":
|
||||
case "function-f":
|
||||
case "function-g":
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (activeFunction) {
|
||||
case "":
|
||||
case "function-c":
|
||||
|
@ -736,12 +705,10 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function areBlinkersActive(activeFunction) {
|
||||
if (semver.gte(CONFIG.apiVersion, "1.20.0")) {
|
||||
switch (activeFunction) {
|
||||
case "function-c":
|
||||
case "function-a":
|
||||
|
@ -749,7 +716,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -758,11 +724,8 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
case "function-l":
|
||||
case "function-s":
|
||||
case "function-g":
|
||||
return false;
|
||||
break;
|
||||
case "function-r":
|
||||
case "function-b":
|
||||
if (semver.lt(CONFIG.apiVersion, "1.20.0"))
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
|
@ -776,29 +739,19 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
var activeFunction = $('select.functionSelect').val();
|
||||
$('select.functionSelect').addClass(activeFunction);
|
||||
|
||||
|
||||
if (semver.lte(CONFIG.apiVersion, "1.18.0")) {
|
||||
// <= 18
|
||||
// Hide GPS (Func)
|
||||
// Hide RSSI (O/L), Blink (Func)
|
||||
// Hide Battery, RSSI (Func), Larson (O/L), Blink (O/L), Landing (O/L)
|
||||
$(".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
|
||||
$('.overlays').hide();
|
||||
$('.modifiers').hide();
|
||||
$('.blinkers').hide();
|
||||
$('.warningOverlay').hide();
|
||||
$('.channel_info').hide();
|
||||
|
||||
if (areOverlaysActive(activeFunction))
|
||||
$('.overlays').show();
|
||||
|
@ -812,29 +765,12 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
if (isWarningActive(activeFunction))
|
||||
$('.warningOverlay').show();
|
||||
|
||||
|
||||
|
||||
// set directions visibility
|
||||
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();
|
||||
if (semver.gte(CONFIG.apiVersion, "1.19.0")) {
|
||||
// set mode colors visibility
|
||||
|
||||
if (semver.gte(CONFIG.apiVersion, "1.20.0"))
|
||||
if (activeFunction == "function-f")
|
||||
if (activeFunction == "function-f") {
|
||||
$('.mode_colors').show();
|
||||
}
|
||||
|
||||
// set special colors visibility
|
||||
$('.special_colors').show();
|
||||
|
@ -867,6 +803,10 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
$('.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:
|
||||
|
@ -874,7 +814,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function applyFunctionToSelectedLeds() {
|
||||
var activeFunction = $('select.functionSelect').val();
|
||||
|
@ -903,16 +842,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
}
|
||||
|
||||
function unselectOverlays(letter) {
|
||||
if (semver.lt(CONFIG.apiVersion, "1.20.0")) {
|
||||
if (letter == 'b' || letter == 'r') {
|
||||
unselectOverlay(letter, 'i');
|
||||
}
|
||||
if (letter == 'b' || letter == 'r' || letter == 'l' || letter == 'g') {
|
||||
unselectOverlay(letter, 'w');
|
||||
unselectOverlay(letter, 't');
|
||||
unselectOverlay(letter, 's');
|
||||
}
|
||||
} else {
|
||||
// MSP 1.20
|
||||
if (letter == 'r' || letter == '') {
|
||||
unselectOverlay(letter, 'o');
|
||||
|
@ -928,7 +857,6 @@ TABS.led_strip.initialize = function (callback, scrollPosition) {
|
|||
unselectOverlay(letter, 'n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function unselectOverlay(func, overlay) {
|
||||
$('input.function-' + overlay).prop('checked', false);
|
||||
|
|
|
@ -1543,10 +1543,6 @@ TABS.mission_control.initialize = function (callback) {
|
|||
// * @param {Object=} opt_options Control 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 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);';
|
||||
|
||||
var handleShowSettings = function () {
|
||||
if (versionCheck) {
|
||||
$('#missionPlannerMultiMission').fadeIn(300);
|
||||
}
|
||||
};
|
||||
|
||||
button.addEventListener('click', handleShowSettings, false);
|
||||
|
@ -1566,7 +1560,7 @@ TABS.mission_control.initialize = function (callback) {
|
|||
var element = document.createElement('div');
|
||||
element.className = 'mission-control-multimission ol-unselectable ol-control';
|
||||
element.appendChild(button);
|
||||
element.title = versionCheck ? 'MP MultiMission' : 'Unavailable';
|
||||
element.title = 'MP MultiMission';
|
||||
|
||||
ol.control.Control.call(this, {
|
||||
element: element,
|
||||
|
|
89
tabs/osd.js
89
tabs/osd.js
|
@ -397,11 +397,8 @@ function osdMainBatteryPreview() {
|
|||
if (Settings.getInputValue('osd_main_voltage_decimals') == 2) {
|
||||
s += '3';
|
||||
}
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
s += 'V';
|
||||
} else {
|
||||
|
||||
s += FONT.symbol(SYM.VOLT);
|
||||
}
|
||||
return FONT.symbol(SYM.BATT) + FONT.embed_dot(s);
|
||||
}
|
||||
|
||||
|
@ -781,19 +778,6 @@ OSD.constants = {
|
|||
name: 'REMAINING_FLIGHT_DISTANCE',
|
||||
id: 49,
|
||||
preview: function(osd_data) {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
||||
case 4: // GA
|
||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
||||
default:
|
||||
// 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
|
||||
|
@ -804,7 +788,6 @@ OSD.constants = {
|
|||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.73') + FONT.symbol(SYM.DIST_KM);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'THROTTLE_POSITION',
|
||||
|
@ -1082,16 +1065,6 @@ OSD.constants = {
|
|||
name: 'ALTITUDE',
|
||||
id: 15,
|
||||
preview: function () {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
case 4: // GA
|
||||
return FONT.symbol(SYM.ALT_FT) + '375';
|
||||
default: // Metric
|
||||
return FONT.symbol(SYM.ALT_M) + '114'
|
||||
}
|
||||
} else {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
|
@ -1101,7 +1074,6 @@ OSD.constants = {
|
|||
return ' 114' + FONT.symbol(SYM.ALT_M);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'VARIO',
|
||||
|
@ -1237,56 +1209,36 @@ OSD.constants = {
|
|||
name: 'CURRENT_DRAW',
|
||||
id: 11,
|
||||
preview: function() {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
return FONT.symbol(SYM.AMP) + FONT.embed_dot('42.1');
|
||||
} else {
|
||||
return FONT.embed_dot('42.1') + FONT.symbol(SYM.AMP);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'MAH_DRAWN',
|
||||
id: 12,
|
||||
preview: function() {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
return FONT.symbol(SYM.MAH) + '690 '; // 4 chars
|
||||
} else {
|
||||
return '1034' + FONT.symbol(SYM.MAH); // 4 chars
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'WH_DRAWN',
|
||||
id: 36,
|
||||
preview: function() {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
return FONT.symbol(SYM.WH) + FONT.embed_dot('1.25');
|
||||
} else {
|
||||
return FONT.embed_dot('1.25') + FONT.symbol(SYM.WH);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'POWER',
|
||||
id: 19,
|
||||
preview: function() {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
return FONT.symbol(SYM.WATT) + '50 '; // 3 chars
|
||||
} else {
|
||||
return ' 69' + FONT.symbol(SYM.WATT); // 3 chars
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'MAIN_BATT_REMAINING_CAPACITY',
|
||||
id: 37,
|
||||
preview: function() {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
return FONT.symbol(SYM.MAH) + '690 '; // 4 chars
|
||||
} else {
|
||||
return '1276' + FONT.symbol(SYM.MAH); // 4 chars
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'EFFICIENCY_MAH',
|
||||
|
@ -1350,16 +1302,6 @@ OSD.constants = {
|
|||
name: 'MSL_ALTITUDE',
|
||||
id: 96,
|
||||
preview: function(osd_data) {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
case 4: // GA
|
||||
return FONT.symbol(SYM.ALT_FT) + '375';
|
||||
default: // Metric
|
||||
return FONT.symbol(SYM.ALT_M) + '114';
|
||||
}
|
||||
} else {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
|
@ -1368,7 +1310,6 @@ OSD.constants = {
|
|||
default: // Metric
|
||||
return ' 114' + FONT.symbol(SYM.ALT_M);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -1483,17 +1424,6 @@ OSD.constants = {
|
|||
name: 'DISTANCE_TO_HOME',
|
||||
id: 23,
|
||||
preview: function(osd_data) {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
return FONT.symbol(SYM.HOME) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
||||
case 4: // GA
|
||||
return FONT.symbol(SYM.HOME) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
||||
default: // Metric
|
||||
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
|
||||
|
@ -1504,24 +1434,12 @@ OSD.constants = {
|
|||
return FONT.symbol(SYM.HOME) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'TRIP_DIST',
|
||||
id: 40,
|
||||
min_version: '1.9.1',
|
||||
preview: function(osd_data) {
|
||||
if (semver.lt(CONFIG.flightControllerVersion, '2.2.0')) {
|
||||
switch (OSD.data.preferences.units) {
|
||||
case 0: // Imperial
|
||||
case 3: // UK
|
||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_MI) + FONT.embed_dot('0.98');
|
||||
case 4: // GA
|
||||
return FONT.symbol(SYM.TRIP_DIST) + FONT.symbol(SYM.DIST_NM) + FONT.embed_dot('0.85');
|
||||
default: // 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
|
||||
|
@ -1532,7 +1450,6 @@ OSD.constants = {
|
|||
return FONT.symbol(SYM.TRIP_DIST) + FONT.embed_dot('1.57') + FONT.symbol(SYM.DIST_KM);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'GPS_HDOP',
|
||||
|
@ -2117,12 +2034,10 @@ OSD.msp = {
|
|||
result.push16(OSD.data.alarms.max_altitude);
|
||||
result.push16(OSD.data.alarms.dist);
|
||||
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_axis_min);
|
||||
result.push16(OSD.data.alarms.gforce_axis_max);
|
||||
result.push8(OSD.data.alarms.current);
|
||||
}
|
||||
result.push16(OSD.data.alarms.imu_temp_alarm_min);
|
||||
result.push16(OSD.data.alarms.imu_temp_alarm_max);
|
||||
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.dist = 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_axis_min = alarms.read16();
|
||||
OSD.data.alarms.gforce_axis_max = alarms.read16();
|
||||
OSD.data.alarms.current = alarms.readU8();
|
||||
}
|
||||
OSD.data.alarms.imu_temp_alarm_min = alarms.read16();
|
||||
OSD.data.alarms.imu_temp_alarm_max = alarms.read16();
|
||||
OSD.data.alarms.baro_temp_alarm_min = alarms.read16();
|
||||
|
|
|
@ -54,14 +54,14 @@
|
|||
</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" />
|
||||
<label for="throttle_idle">
|
||||
<span data-i18n="throttleIdle"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="number requires-v2_4">
|
||||
<div class="number">
|
||||
<input id="motor_poles" data-setting="motor_poles" type="number" />
|
||||
<label for="motor_poles">
|
||||
<span data-i18n="motor_poles"></span>
|
||||
|
|
|
@ -70,12 +70,6 @@ TABS.outputs.initialize = function (callback) {
|
|||
process_servos();
|
||||
processConfiguration();
|
||||
|
||||
if (semver.gte(CONFIG.flightControllerVersion, "2.4.0")) {
|
||||
$('.requires-v2_4').show();
|
||||
} else {
|
||||
$('.requires-v2_4').hide();
|
||||
}
|
||||
|
||||
finalize();
|
||||
}
|
||||
|
||||
|
|
6
tabs/pid_tuning.html
Executable file → Normal file
6
tabs/pid_tuning.html
Executable file → Normal file
|
@ -302,9 +302,9 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<div class="clear-both requires-v2_4"></div>
|
||||
<div class="tab_subtitle requires-v2_4" data-i18n="pidTuning_rpmFilters" style="margin-top: 1em;"></div>
|
||||
<div class="cf_column requires-v2_4">
|
||||
<div class="clear-both"></div>
|
||||
<div class="tab_subtitle" data-i18n="pidTuning_rpmFilters" style="margin-top: 1em;"></div>
|
||||
<div class="cf_column">
|
||||
<table class="settings-table settings-table--filtering">
|
||||
<tbody>
|
||||
<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'));
|
||||
}
|
||||
|
||||
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.features.updateUI($('.tab-pid_tuning'), FEATURES);
|
||||
|
||||
|
|
|
@ -131,15 +131,6 @@ TABS.ports.initialize = function (callback) {
|
|||
'115200'
|
||||
];
|
||||
|
||||
var telemetryBaudRates_pre1_6_3 = [
|
||||
'AUTO',
|
||||
'9600',
|
||||
'19200',
|
||||
'38400',
|
||||
'57600',
|
||||
'115200'
|
||||
];
|
||||
|
||||
var telemetryBaudRates_post1_6_3 = [
|
||||
'AUTO',
|
||||
'1200',
|
||||
|
@ -210,9 +201,8 @@ TABS.ports.initialize = function (callback) {
|
|||
}
|
||||
|
||||
$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.length; i++) {
|
||||
$elements.append('<option value="' + telemetryBaudRates[i] + '">' + telemetryBaudRates[i] + '</option>');
|
||||
for (i = 0; i < telemetryBaudRates_post1_6_3.length; i++) {
|
||||
$elements.append('<option value="' + telemetryBaudRates_post1_6_3[i] + '">' + telemetryBaudRates_post1_6_3[i] + '</option>');
|
||||
}
|
||||
|
||||
$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