Add GPS Rescue option to Failsafe tab

10.5.x-maintenance
Miguel Angel Mulero Martinez 2018-11-12 14:13:26 +01:00
parent 1fbf411b5a
commit 62de168868
7 changed files with 200 additions and 23 deletions

View File

@ -3008,6 +3008,47 @@
"failsafeProcedureItemSelect2": { "failsafeProcedureItemSelect2": {
"message": "Drop" "message": "Drop"
}, },
"failsafeProcedureItemSelect4": {
"message": "GPS Rescue"
},
"failsafeGpsRescueItemAngle": {
"message": "Angle"
},
"failsafeGpsRescueItemInitialAltitude": {
"message": "Initial altitude (meters)"
},
"failsafeGpsRescueItemDescentDistance": {
"message": "Descent distance (meters)"
},
"failsafeGpsRescueItemGroundSpeed": {
"message": "Ground speed (meters/second)"
},
"failsafeGpsRescueItemThrottleMin": {
"message": "Throttle minimum"
},
"failsafeGpsRescueItemThrottleMax": {
"message": "Throttle maximum"
},
"failsafeGpsRescueItemThrottleHover": {
"message": "Throttle hover"
},
"failsafeGpsRescueItemMinSats": {
"message": "Minimum satellites"
},
"failsafeGpsRescueItemSanityChecks": {
"message": "Sanity checks"
},
"failsafeGpsRescueItemSanityChecksOff": {
"message": "Off"
},
"failsafeGpsRescueItemSanityChecksOn": {
"message": "On"
},
"failsafeGpsRescueItemSanityChecksFSOnly": {
"message": "Failsafe only"
},
"failsafeKillSwitchItem": { "failsafeKillSwitchItem": {
"message": "Failsafe Kill Switch (setup Failsafe in Modes Tab)" "message": "Failsafe Kill Switch (setup Failsafe in Modes Tab)"
}, },

View File

@ -63,7 +63,8 @@
background-color: #ededed; background-color: #ededed;
margin-bottom: 0; margin-bottom: 0;
margin-top: 5px; margin-top: 5px;
height: 150px; min-height: 90px;
padding-bottom: 10px;
} }
.tab-failsafe .radiobuttons { .tab-failsafe .radiobuttons {
@ -248,10 +249,6 @@
padding-bottom: 7px; padding-bottom: 7px;
} }
.tab-failsafe .pro1 {
height: 90px;
}
.tab-failsafe .featuresNew { .tab-failsafe .featuresNew {
width: 100%; width: 100%;
} }
@ -296,7 +293,7 @@
.tab-failsafe .switchMode { .tab-failsafe .switchMode {
border: 1px solid silver; border: 1px solid silver;
margin-right: 5px; margin-right: 5px;
width: 80px; min-width: 80px;
} }
@media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) { @media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {

View File

@ -50,6 +50,7 @@ var RC_DEADBAND_CONFIG;
var SENSOR_ALIGNMENT; var SENSOR_ALIGNMENT;
var RX_CONFIG; var RX_CONFIG;
var FAILSAFE_CONFIG; var FAILSAFE_CONFIG;
var GPS_RESCUE;
var RXFAIL_CONFIG; var RXFAIL_CONFIG;
var PID_ADVANCED_CONFIG; var PID_ADVANCED_CONFIG;
var FILTER_CONFIG; var FILTER_CONFIG;
@ -420,7 +421,19 @@ var FC = {
failsafe_throttle: 0, failsafe_throttle: 0,
failsafe_switch_mode: 0, failsafe_switch_mode: 0,
failsafe_throttle_low_delay: 0, failsafe_throttle_low_delay: 0,
failsafe_procedure: 0. failsafe_procedure: 0,
};
GPS_RESCUE = {
angle: 0,
initialAltitudeM: 0,
descentDistanceM: 0,
rescueGroundspeed: 0,
throttleMin: 0,
throttleMax: 0,
throttleHover: 0,
sanityChecks: 0,
minSats: 0,
}; };
RXFAIL_CONFIG = []; RXFAIL_CONFIG = [];

View File

@ -110,6 +110,7 @@ var MSPCodes = {
MSP_MOTOR_CONFIG: 131, MSP_MOTOR_CONFIG: 131,
MSP_GPS_CONFIG: 132, MSP_GPS_CONFIG: 132,
MSP_COMPASS_CONFIG: 133, MSP_COMPASS_CONFIG: 133,
MSP_GPS_RESCUE: 135,
MSP_STATUS_EX: 150, MSP_STATUS_EX: 150,
@ -145,6 +146,7 @@ var MSPCodes = {
MSP_SET_MOTOR_CONFIG: 222, MSP_SET_MOTOR_CONFIG: 222,
MSP_SET_GPS_CONFIG: 223, MSP_SET_GPS_CONFIG: 223,
MSP_SET_COMPASS_CONFIG: 224, MSP_SET_COMPASS_CONFIG: 224,
MSP_SET_GPS_RESCUE: 225,
MSP_SET_ACC_TRIM: 239, MSP_SET_ACC_TRIM: 239,
MSP_ACC_TRIM: 240, MSP_ACC_TRIM: 240,

View File

@ -382,6 +382,17 @@ MspHelper.prototype.process_data = function(dataHandler) {
GPS_CONFIG.auto_baud = data.readU8(); GPS_CONFIG.auto_baud = data.readU8();
} }
break; break;
case MSPCodes.MSP_GPS_RESCUE:
GPS_RESCUE.angle = data.readU16();
GPS_RESCUE.initialAltitudeM = data.readU16();
GPS_RESCUE.descentDistanceM = data.readU16();
GPS_RESCUE.rescueGroundspeed = data.readU16();
GPS_RESCUE.throttleMin = data.readU16();
GPS_RESCUE.throttleMax = data.readU16();
GPS_RESCUE.throttleHover = data.readU16();
GPS_RESCUE.sanityChecks = data.readU8();
GPS_RESCUE.minSats = data.readU8();
break;
case MSPCodes.MSP_RSSI_CONFIG: case MSPCodes.MSP_RSSI_CONFIG:
RSSI_CONFIG.channel = data.readU8(); RSSI_CONFIG.channel = data.readU8();
break; break;
@ -1391,6 +1402,17 @@ MspHelper.prototype.crunch = function(code) {
.push8(GPS_CONFIG.auto_baud); .push8(GPS_CONFIG.auto_baud);
} }
break; break;
case MSPCodes.MSP_SET_GPS_RESCUE:
buffer.push16(GPS_RESCUE.angle)
.push16(GPS_RESCUE.initialAltitudeM)
.push16(GPS_RESCUE.descentDistanceM)
.push16(GPS_RESCUE.rescueGroundspeed)
.push16(GPS_RESCUE.throttleMin)
.push16(GPS_RESCUE.throttleMax)
.push16(GPS_RESCUE.throttleHover)
.push8(GPS_RESCUE.sanityChecks)
.push8(GPS_RESCUE.minSats);
break;
case MSPCodes.MSP_SET_COMPASS_CONFIG: case MSPCodes.MSP_SET_COMPASS_CONFIG:
buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100)); buffer.push16(Math.round(COMPASS_CONFIG.mag_declination * 100));
break; break;

View File

@ -18,7 +18,12 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
} }
function load_rxfail_config() { function load_rxfail_config() {
MSP.send_message(MSPCodes.MSP_RXFAIL_CONFIG, false, false, get_box_names); MSP.send_message(MSPCodes.MSP_RXFAIL_CONFIG, false, false,
semver.gte(CONFIG.apiVersion, "1.41.0") ? load_gps_rescue : get_box_names);
}
function load_gps_rescue() {
MSP.send_message(MSPCodes.MSP_GPS_RESCUE, false, false, get_box_names);
} }
function get_box_names() { function get_box_names() {
@ -238,21 +243,11 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
var element = $(this), var element = $(this),
checked = element.is(':checked'), checked = element.is(':checked'),
id = element.attr('id'); id = element.attr('id');
switch(id) {
case 'drop':
if (checked) {
$('input[name="failsafe_throttle"]').prop("disabled", true);
$('input[name="failsafe_off_delay"]').prop("disabled", true);
}
break;
case 'land': // Disable all the settings
if (checked) { $('.proceduresettings :input').attr('disabled',true);
$('input[name="failsafe_throttle"]').prop("disabled", false); // Enable only selected
$('input[name="failsafe_off_delay"]').prop("disabled", false); element.parent().parent().find(':input').attr('disabled',false);
}
break;
}
}); });
switch(FAILSAFE_CONFIG.failsafe_procedure) { switch(FAILSAFE_CONFIG.failsafe_procedure) {
@ -267,6 +262,11 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
element.prop('checked', true); element.prop('checked', true);
element.change(); element.change();
break; break;
case 2:
element = $('input[id="gps_rescue"]');
element.prop('checked', true);
element.change();
break;
} }
if (semver.gte(CONFIG.apiVersion, "1.39.0")) { if (semver.gte(CONFIG.apiVersion, "1.39.0")) {
@ -280,6 +280,31 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
$('div.failsafe_switch').hide(); $('div.failsafe_switch').hide();
} }
// The GPS Rescue tab is only available for 1.40 or later, and the parameters for 1.41
if (semver.gte(CONFIG.apiVersion, "1.40.0")) {
if (semver.gte(CONFIG.apiVersion, "1.41.0")) {
// Load GPS Rescue parameters
$('input[name="gps_rescue_angle"]').val(GPS_RESCUE.angle);
$('input[name="gps_rescue_initial_altitude"]').val(GPS_RESCUE.initialAltitudeM);
$('input[name="gps_rescue_descent_distance"]').val(GPS_RESCUE.descentDistanceM);
$('input[name="gps_rescue_ground_speed"]').val((GPS_RESCUE.rescueGroundspeed / 100).toFixed(2));
$('input[name="gps_rescue_throttle_min"]').val(GPS_RESCUE.throttleMin);
$('input[name="gps_rescue_throttle_max"]').val(GPS_RESCUE.throttleMax);
$('input[name="gps_rescue_throttle_hover"]').val(GPS_RESCUE.throttleHover);
$('input[name="gps_rescue_min_sats"]').val(GPS_RESCUE.minSats);
$('select[name="gps_rescue_sanity_checks"]').val(GPS_RESCUE.sanityChecks);
} else {
// GPS Rescue Parameters not available
$('.pro4 > .proceduresettings').hide();
}
} else {
// GPS Rescue option not available
$('.pro4').hide();
}
$('a.save').click(function () { $('a.save').click(function () {
@ -299,6 +324,8 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
FAILSAFE_CONFIG.failsafe_procedure = 0; FAILSAFE_CONFIG.failsafe_procedure = 0;
} else if( $('input[id="drop"]').is(':checked')) { } else if( $('input[id="drop"]').is(':checked')) {
FAILSAFE_CONFIG.failsafe_procedure = 1; FAILSAFE_CONFIG.failsafe_procedure = 1;
} else if( $('input[id="gps_rescue"]').is(':checked')) {
FAILSAFE_CONFIG.failsafe_procedure = 2;
} }
if (semver.gte(CONFIG.apiVersion, "1.39.0")) { if (semver.gte(CONFIG.apiVersion, "1.39.0")) {
@ -308,6 +335,19 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
FAILSAFE_CONFIG.failsafe_switch_mode = $('input[name="failsafe_kill_switch"]').is(':checked') ? 1 : 0; FAILSAFE_CONFIG.failsafe_switch_mode = $('input[name="failsafe_kill_switch"]').is(':checked') ? 1 : 0;
} }
if (semver.gte(CONFIG.apiVersion, "1.41.0")) {
// Load GPS Rescue parameters
GPS_RESCUE.angle = $('input[name="gps_rescue_angle"]').val();
GPS_RESCUE.initialAltitudeM = $('input[name="gps_rescue_initial_altitude"]').val();
GPS_RESCUE.descentDistanceM = $('input[name="gps_rescue_descent_distance"]').val();
GPS_RESCUE.rescueGroundspeed = $('input[name="gps_rescue_ground_speed"]').val() * 100;
GPS_RESCUE.throttleMin = $('input[name="gps_rescue_throttle_min"]').val();
GPS_RESCUE.throttleMax = $('input[name="gps_rescue_throttle_max"]').val();
GPS_RESCUE.throttleHover = $('input[name="gps_rescue_throttle_hover"]').val();
GPS_RESCUE.minSats = $('input[name="gps_rescue_min_sats"]').val();
GPS_RESCUE.sanityChecks = $('select[name="gps_rescue_sanity_checks"]').val();
}
function save_failssafe_config() { function save_failssafe_config() {
MSP.send_message(MSPCodes.MSP_SET_FAILSAFE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FAILSAFE_CONFIG), false, save_rxfail_config); MSP.send_message(MSPCodes.MSP_SET_FAILSAFE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FAILSAFE_CONFIG), false, save_rxfail_config);
} }
@ -317,9 +357,14 @@ TABS.failsafe.initialize = function (callback, scrollPosition) {
} }
function save_feature_config() { function save_feature_config() {
MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false, save_to_eeprom); MSP.send_message(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG), false,
semver.gte(CONFIG.apiVersion, "1.41.0") ? save_gps_rescue : save_to_eeprom);
} }
function save_gps_rescue() {
MSP.send_message(MSPCodes.MSP_SET_GPS_RESCUE, mspHelper.crunch(MSPCodes.MSP_SET_GPS_RESCUE), false, save_to_eeprom);
}
function save_to_eeprom() { function save_to_eeprom() {
MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot);
} }

View File

@ -115,6 +115,63 @@
</div> </div>
</div> </div>
</div> </div>
<div class="radioarea pro4 stage2">
<div class="radiobuttons"><input class="procedure" id="gps_rescue" name="group1" type="radio" checked/>
<label for="gps_rescue" i18n="failsafeProcedureItemSelect4"></label>
</div>
<div class="proceduresettings">
<div class="number">
<label> <input type="number" name="gps_rescue_angle" min="0" max="200" /> <span
i18n="failsafeGpsRescueItemAngle"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_initial_altitude" min="20" max="100" /> <span
i18n="failsafeGpsRescueItemInitialAltitude"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_descent_distance" min="30" max="500" /> <span
i18n="failsafeGpsRescueItemDescentDistance"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_ground_speed" min="0.30" max="30.00" step="0.01"/> <span
i18n="failsafeGpsRescueItemGroundSpeed"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_throttle_min" min="1000" max="2000" /> <span
i18n="failsafeGpsRescueItemThrottleMin"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_throttle_max" min="1000" max="2000" /> <span
i18n="failsafeGpsRescueItemThrottleMax"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_throttle_hover" min="1000" max="2000" /> <span
i18n="failsafeGpsRescueItemThrottleHover"></span>
</label>
</div>
<div class="number">
<label> <input type="number" name="gps_rescue_min_sats" min="0" max="50" /> <span
i18n="failsafeGpsRescueItemMinSats"></span>
</label>
</div>
<div class="selectSwitchMode">
<label>
<select class="switchMode" name="gps_rescue_sanity_checks">
<option value="0" i18n="failsafeGpsRescueItemSanityChecksOff"></option>
<option value="1" i18n="failsafeGpsRescueItemSanityChecksOn"></option>
<option value="2" i18n="failsafeGpsRescueItemSanityChecksFSOnly"></option>
</select>
<span i18n="failsafeGpsRescueItemSanityChecks"></span>
</label>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>