1
0
Fork 0
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:
Darren Lines 2022-03-01 20:06:11 +00:00
commit c07b81ed45
32 changed files with 341 additions and 1080 deletions

View file

@ -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.

View file

@ -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
View file

@ -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"];

View file

@ -18,7 +18,6 @@ var GUI_control = function () {
];
this.defaultAllowedTabsWhenConnected = [
'failsafe',
'transponder',
'adjustments',
'auxiliary',
'cli',

View file

@ -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,

View file

@ -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,

View file

@ -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;

View file

@ -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));
}

View file

@ -1,7 +1,5 @@
'use strict';
const GulpClient = require("gulp");
var Settings = (function () {
let self = {};

View file

@ -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;
})();

View file

@ -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);
}

View file

@ -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>

View file

@ -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;

View file

@ -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",

View file

@ -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

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

View file

@ -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;

View file

@ -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;
}

View file

@ -53,7 +53,7 @@ TABS.calibration.initialize = function (callback) {
googleAnalytics.sendAppView('Calibration');
}
loadChainer.setChain([
mspHelper.loadStatus,
mspHelper.queryFcStatus,
mspHelper.loadSensorConfig,
mspHelper.loadCalibrationData
]);

View file

@ -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());

View file

@ -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>

View file

@ -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);

View file

@ -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,

View file

@ -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();

View file

@ -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>

View file

@ -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
View 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
View 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);

View file

@ -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');

View file

@ -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>

View file

@ -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();
};