Several fixes for compatibility with BF 3.1.x

10.3.x-maintenance
Bas Delfos 2017-07-29 20:45:56 +02:00
parent 192b3f1341
commit 63af808444
7 changed files with 444 additions and 39 deletions

View File

@ -2480,6 +2480,45 @@
"configurationMagHardware": {
"message": "Magnetometer (if supported)"
},
// ---------------------------------------------
// Remove this when we officialy retire BF 3.1.x
"configurationBatteryVoltage": {
"message": "Battery Voltage"
},
"configurationBatteryCurrent": {
"message": "Battery Current"
},
"configurationBatteryMeterType": {
"message": "Battery Meter Type"
},
"configurationBatteryMinimum": {
"message": "Minimum Cell Voltage"
},
"configurationBatteryMaximum": {
"message": "Maximum Cell Voltage"
},
"configurationBatteryWarning": {
"message": "Warning Cell Voltage"
},
"configurationBatteryScale": {
"message": "Voltage Scale"
},
"configurationCurrentMeterType": {
"message": "Current Meter Type"
},
"configurationCurrent": {
"message": "Current Sensor"
},
"configurationCurrentScale": {
"message": "Scale the output voltage to milliamps [1/10th mV/A]"
},
"configurationCurrentOffset": {
"message": "Offset in millivolt steps"
},
"configurationBatteryMultiwiiCurrent": {
"message": "Enable support for legacy Multiwii MSP current output"
},
// --------------------------------------------- END
"pidTuningProfile": {
"message": "Profile"
},

View File

@ -2,6 +2,7 @@
// define all the global variables that are uses to hold FC state
var CONFIG;
var BF_CONFIG; // Remove when we officialy retire BF 3.1
var FEATURE_CONFIG;
var BEEPER_CONFIG;
var MIXER_CONFIG;
@ -79,6 +80,13 @@ var FC = {
boardType: 0,
};
BF_CONFIG = {
currentscale: 0,
currentoffset: 0,
currentmetertype: 0,
batterycapacity: 0,
};
FEATURE_CONFIG = {
features: 0,
};
@ -228,6 +236,7 @@ var FC = {
vbatmincellvoltage: 0,
vbatmaxcellvoltage: 0,
vbatwarningcellvoltage: 0,
batterymetertype: 1, // 1=ADC, 2=ESC
};
MOTOR_CONFIG = {
minthrottle: 0,

View File

@ -171,6 +171,7 @@ MspHelper.prototype.process_data = function(dataHandler) {
}
break;
case MSPCodes.MSP_CURRENT_METERS:
CURRENT_METERS = [];
var currentMeterLength = 5;
for (var i = 0; i < (data.byteLength / currentMeterLength); i++) {
@ -192,46 +193,63 @@ MspHelper.prototype.process_data = function(dataHandler) {
break;
case MSPCodes.MSP_VOLTAGE_METER_CONFIG:
VOLTAGE_METER_CONFIGS = [];
var voltage_meter_count = data.readU8();
if (semver.lt(CONFIG.apiVersion, "1.36.0")) {
MISC.vbatscale = data.readU8(); // 10-200
MISC.vbatmincellvoltage = data.readU8() / 10; // 10-50
MISC.vbatmaxcellvoltage = data.readU8() / 10; // 10-50
MISC.vbatwarningcellvoltage = data.readU8() / 10; // 10-50
if (semver.gte(CONFIG.apiVersion, "1.23.0")) {
MISC.batterymetertype = data.readU8();
}
} else {
VOLTAGE_METER_CONFIGS = [];
var voltage_meter_count = data.readU8();
for (var i = 0; i < voltage_meter_count; i++) {
var subframe_length = data.readU8();
if (subframe_length != 5) {
for (var j = 0; j < subframe_length; j++) {
data.readU8();
for (var i = 0; i < voltage_meter_count; i++) {
var subframe_length = data.readU8();
if (subframe_length != 5) {
for (var j = 0; j < subframe_length; j++) {
data.readU8();
}
} else {
var voltageMeterConfig = {};
voltageMeterConfig.id = data.readU8();
voltageMeterConfig.sensorType = data.readU8();
voltageMeterConfig.vbatscale = data.readU8();
voltageMeterConfig.vbatresdivval = data.readU8();
voltageMeterConfig.vbatresdivmultiplier = data.readU8();
VOLTAGE_METER_CONFIGS.push(voltageMeterConfig);
}
} else {
var voltageMeterConfig = {};
voltageMeterConfig.id = data.readU8();
voltageMeterConfig.sensorType = data.readU8();
voltageMeterConfig.vbatscale = data.readU8();
voltageMeterConfig.vbatresdivval = data.readU8();
voltageMeterConfig.vbatresdivmultiplier = data.readU8();
VOLTAGE_METER_CONFIGS.push(voltageMeterConfig);
}
}
break;
case MSPCodes.MSP_CURRENT_METER_CONFIG:
var offset = 0;
CURRENT_METER_CONFIGS = [];
var current_meter_count = data.readU8();
for (var i = 0; i < current_meter_count; i++) {
var currentMeterConfig = {};
var subframe_length = data.readU8();
if (semver.lt(CONFIG.apiVersion, "1.36.0")) {
BF_CONFIG.currentscale = data.read16();
BF_CONFIG.currentoffset = data.read16();
BF_CONFIG.currentmetertype = data.readU8();
BF_CONFIG.batterycapacity = data.readU16();
} else {
var offset = 0;
CURRENT_METER_CONFIGS = [];
var current_meter_count = data.readU8();
for (var i = 0; i < current_meter_count; i++) {
var currentMeterConfig = {};
var subframe_length = data.readU8();
if (subframe_length != 6) {
for (var j = 0; j < subframe_length; j++) {
data.readU8();
if (subframe_length != 6) {
for (var j = 0; j < subframe_length; j++) {
data.readU8();
}
} else {
currentMeterConfig.id = data.readU8();
currentMeterConfig.sensorType = data.readU8();
currentMeterConfig.scale = data.readU16();
currentMeterConfig.offset = data.readU16();
CURRENT_METER_CONFIGS.push(currentMeterConfig);
}
} else {
currentMeterConfig.id = data.readU8();
currentMeterConfig.sensorType = data.readU8();
currentMeterConfig.scale = data.readU16();
currentMeterConfig.offset = data.readU16();
CURRENT_METER_CONFIGS.push(currentMeterConfig);
}
}
break;
@ -1273,11 +1291,11 @@ MspHelper.prototype.crunch = function(code) {
case MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG:
if (semver.lt(CONFIG.apiVersion, "1.36.0")) {
buffer.push8(MISC.vbatscale)
.push8(Math.round(BATTERY_CONFIG.vbatmincellvoltage * 10))
.push8(Math.round(BATTERY_CONFIG.vbatmaxcellvoltage * 10))
.push8(Math.round(BATTERY_CONFIG.vbatwarningcellvoltage * 10));
.push8(Math.round(MISC.vbatmincellvoltage * 10))
.push8(Math.round(MISC.vbatmaxcellvoltage * 10))
.push8(Math.round(MISC.vbatwarningcellvoltage * 10));
if (semver.gte(CONFIG.apiVersion, "1.23.0")) {
buffer.push8(BATTERY_CONFIG.voltageMeterSource);
buffer.push8(MISC.batterymetertype);
}
}
break;
@ -1285,7 +1303,7 @@ MspHelper.prototype.crunch = function(code) {
if (semver.lt(CONFIG.apiVersion, "1.36.0")) {
buffer.push16(BF_CONFIG.currentscale)
.push16(BF_CONFIG.currentoffset)
.push8(BATTERY_CONFIG.currentMeterSource)
.push8(BF_CONFIG.currentmetertype)
.push16(BF_CONFIG.batterycapacity)
}
break;

View File

@ -470,11 +470,18 @@ function updateTabList(features) {
} else {
$('#tabs ul.mode-connected li.tab_transponder').hide();
}
if (features.isEnabled('OSD')) {
$('#tabs ul.mode-connected li.tab_osd').show();
} else {
$('#tabs ul.mode-connected li.tab_osd').hide();
}
if (semver.gte(CONFIG.apiVersion, "1.36.0")) {
$('#tabs ul.mode-connected li.tab_power').show();
} else {
$('#tabs ul.mode-connected li.tab_power').hide();
}
}
function zeroPad(value, width) {

View File

@ -291,13 +291,21 @@
width: 150px;
}
.tab-configuration .currentMeterSource {
.tab-configuration .currentmetertype {
border: 1px solid silver;
margin-right: 5px;
float: left;
width: 150px;
}
.tab-configuration .vbatmonitoring {
margin-top: 5px;
}
.tab-configuration .currentMonitoring {
margin-top: 5px;
}
.tab-configuration .rssi td:nth-child(2) {
width: 30px;
}

View File

@ -668,11 +668,150 @@
</div>
</div>
</div>
<<<<<<< HEAD
</td>
</tr>
</table>
=======
</div>
</div>
<div class="clear-both"></div>
</div>
<!-- -------------------------------------------------------- -->
<!-- Remove this part when we officialy retire BF 3.1.x -->
<div class="rightWrapper current voltage oldBatteryConfig">
<div class="gui_box grey">
<div class="gui_box_titlebar">
<div class="spacer_box_title" i18n="configurationBatteryVoltage"></div>
</div>
<div class="spacer_box">
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th i18n="configurationFeatureEnabled"></th>
<th i18n="configurationFeatureDescription"></th>
<th i18n="configurationFeatureName"></th>
</tr>
</thead>
<tbody class="features batteryVoltage">
<!-- table generated here -->
</tbody>
</table>
<div class="select batterymetertype vbatmonitoring">
<label>
<select class="batterymetertype"><!-- list generated here --></select>
<span i18n="configurationBatteryMeterType"></span>
</label>
</div>
<div class="number vbatmonitoring">
<label> <input type="number" name="mincellvoltage" step="0.1" min="1" max="5" /> <span
i18n="configurationBatteryMinimum"></span>
</label>
</div>
<div class="number vbatmonitoring">
<label> <input type="number" name="maxcellvoltage" step="0.1" min="1" max="5" /> <span
i18n="configurationBatteryMaximum"></span>
</label>
</div>
<div class="number vbatmonitoring">
<label> <input type="number" name="warningcellvoltage" step="0.1" min="1" max="5" /> <span
i18n="configurationBatteryWarning"></span>
</label>
</div>
<div class="number vbatmonitoring vbatCalibration">
<label> <input type="number" name="voltagescale" step="1" min="10" max="255" /> <span
i18n="configurationBatteryScale"></span>
</label>
</div>
<div class="number vbatmonitoring">
<label> <input type="text" name="batteryvoltage" readonly class="disabled" /> <span
i18n="configurationBatteryVoltage"></span>
</label>
</div>
</div>
</div>
<div class="gui_box grey">
<div class="gui_box_titlebar">
<div class="spacer_box_title" i18n="configurationCurrent"></div>
</div>
<div class="spacer_box">
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th i18n="configurationFeatureEnabled"></th>
<th i18n="configurationFeatureDescription"></th>
<th i18n="configurationFeatureName"></th>
</tr>
</thead>
<tbody class="features batteryCurrent">
<!-- table generated here -->
</tbody>
</table>
<div class="select currentMonitoring">
<label>
<select class="currentmetertype"><!-- list generated here --></select>
<span i18n="configurationCurrentMeterType"></span>
</label>
</div>
<div class="number currentMonitoring currentCalibration">
<label> <input type="number" name="currentscale" step="1" min="-16000" max="16000" /> <span
i18n="configurationCurrentScale"></span>
</label>
</div>
<div class="number currentMonitoring currentCalibration">
<label> <input type="number" name="currentoffset" step="1" min="-1600" max="16000" /> <span
i18n="configurationCurrentOffset"></span>
</label>
</div>
<div class="number currentMonitoring currentOutput">
<label>
<input type="text" name="batterycurrent" readonly class="disabled" /> <span
i18n="configurationBatteryCurrent"></span>
</label>
</div>
<div class="checkbox currentMonitoring currentOutput">
<div class="numberspacer">
<input type="checkbox" name="multiwiicurrentoutput" class="toggle" />
</div>
<label> <span i18n="configurationBatteryMultiwiiCurrent"></span>
</label>
</div>
</div>
</div>
</div>
<!-- -------------------------------------------------------- -->
<div class="leftWrapper beepers" style="width: calc(100% - 20px);">
<div class="gui_box grey" style="margin-top:10px;">
<div class="gui_box_titlebar">
<div class="spacer_box_title" i18n="configurationBeeper"></div>
</div>
<div class="spacer_box">
<table cellpadding="0" cellspacing="0">
<tbody class="beeper-configuration" id="noline">
<tr class="beeper-template" style="display:none">
<td>
<input class="beeper toggle" id="" name="" title="" type="checkbox" />
</td>
<td>
<label for=""></label>
</td>
<td>
<span i18n=""></span>
</td>
</tr>
<!-- table generated here -->
</tbody>
</table>
</div>
</div>
</div>
<div class="clear-both"></div>
>>>>>>> Several fixes for compatibility with BF 3.1.x
<div class="content_toolbar">
<div class="btn save_btn">
<a class="save" href="#" i18n="configurationButtonSave"></a>

View File

@ -1,7 +1,8 @@
'use strict';
TABS.configuration = {
DSHOT_PROTOCOL_MIN_VALUE: 5
DSHOT_PROTOCOL_MIN_VALUE: 5,
SHOW_OLD_BATTERY_CONFIG: false
};
TABS.configuration.initialize = function (callback, scrollPosition) {
@ -11,6 +12,13 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
GUI.active_tab = 'configuration';
}
if (semver.lt(CONFIG.apiVersion, "1.36.0")) {
//Show old battery configuration for pre-BF-3.2
self.SHOW_OLD_BATTERY_CONFIG = true;
} else {
self.SHOW_OLD_BATTERY_CONFIG = false;
}
function load_config() {
MSP.send_message(MSPCodes.MSP_FEATURE_CONFIG, false, false, load_beeper_config);
}
@ -140,6 +148,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
function load_name() {
var next_callback = load_rx_config;
if (self.SHOW_OLD_BATTERY_CONFIG) {
next_callback = load_battery;
}
if (semver.gte(CONFIG.apiVersion, "1.20.0")) {
MSP.send_message(MSPCodes.MSP_NAME, false, false, next_callback);
} else {
@ -147,6 +160,27 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
}
}
// -----------------------------------------------
// Remove this when we officily retire BF 3.1.x
function load_battery() {
var next_callback = load_current;
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
MSP.send_message(MSPCodes.MSP_VOLTAGE_METER_CONFIG, false, false, next_callback);
} else {
next_callback();
}
}
function load_current() {
var next_callback = load_rx_config;
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
MSP.send_message(MSPCodes.MSP_CURRENT_METER_CONFIG, false, false, next_callback);
} else {
next_callback();
}
}
// -----------------------------------------------
function load_rx_config() {
var next_callback = load_html;
if (semver.gte(CONFIG.apiVersion, "1.31.0")) {
@ -558,6 +592,105 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
$('input[name="maxthrottle"]').val(MOTOR_CONFIG.maxthrottle);
$('input[name="mincommand"]').val(MOTOR_CONFIG.mincommand);
// -----------------------------------------------
// Remove this when we officily retire BF 3.1.x
// fill battery
if (self.SHOW_OLD_BATTERY_CONFIG) {
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
var batteryMeterTypes = [
'Onboard ADC',
'ESC Sensor'
];
var batteryMeterType_e = $('select.batterymetertype');
for (i = 0; i < batteryMeterTypes.length; i++) {
batteryMeterType_e.append('<option value="' + i + '">' + batteryMeterTypes[i] + '</option>');
}
batteryMeterType_e.change(function () {
MISC.batterymetertype = parseInt($(this).val());
checkUpdateVbatControls();
});
batteryMeterType_e.val(MISC.batterymetertype).change();
} else {
$('div.batterymetertype').hide();
}
$('input[name="mincellvoltage"]').val(MISC.vbatmincellvoltage);
$('input[name="maxcellvoltage"]').val(MISC.vbatmaxcellvoltage);
$('input[name="warningcellvoltage"]').val(MISC.vbatwarningcellvoltage);
$('input[name="voltagescale"]').val(MISC.vbatscale);
// fill current
var currentMeterTypes = [
'None',
'Onboard ADC',
'Virtual'
];
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
currentMeterTypes.push('ESC Sensor');
}
var currentMeterType_e = $('select.currentmetertype');
for (i = 0; i < currentMeterTypes.length; i++) {
currentMeterType_e.append('<option value="' + i + '">' + currentMeterTypes[i] + '</option>');
}
currentMeterType_e.change(function () {
BF_CONFIG.currentmetertype = parseInt($(this).val());
checkUpdateCurrentControls();
});
currentMeterType_e.val(BF_CONFIG.currentmetertype).change();
$('input[name="currentscale"]').val(BF_CONFIG.currentscale);
$('input[name="currentoffset"]').val(BF_CONFIG.currentoffset);
$('input[name="multiwiicurrentoutput"]').prop('checked', MISC.multiwiicurrentoutput !== 0);
} else {
$('.oldBatteryConfig').hide();
}
function checkUpdateVbatControls() {
if (FEATURE_CONFIG.features.isEnabled('VBAT')) {
$('.vbatmonitoring').show();
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
$('select.batterymetertype').show();
if (MISC.batterymetertype !== 0) {
$('.vbatCalibration').hide();
}
} else {
$('select.batterymetertype').hide();
}
} else {
$('.vbatmonitoring').hide();
}
}
function checkUpdateCurrentControls() {
if (FEATURE_CONFIG.features.isEnabled('CURRENT_METER')) {
$('.currentMonitoring').show();
switch(BF_CONFIG.currentmetertype) {
case 0:
$('.currentCalibration').hide();
$('.currentOutput').hide();
break;
case 3:
$('.currentCalibration').hide();
}
if (BF_CONFIG.currentmetertype !== 1 && BF_CONFIG.currentmetertype !== 2) {
$('.currentCalibration').hide();
}
} else {
$('.currentMonitoring').hide();
}
}
// ------------------------------------------------
//fill 3D
if (semver.lt(CONFIG.apiVersion, "1.14.0")) {
$('.tab-configuration ._3d').hide();
@ -611,6 +744,17 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
checkShowDisarmDelay();
break;
case 'VBAT':
if (self.SHOW_OLD_BATTERY_CONFIG) {
checkUpdateVbatControls();
}
break;
case 'CURRENT_METER':
if (self.SHOW_OLD_BATTERY_CONFIG) {
checkUpdateCurrentControls();
}
case 'GPS':
checkUpdateGpsControls();
break;
@ -650,6 +794,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
checkUpdateGpsControls();
checkUpdate3dControls();
if (self.SHOW_OLD_BATTERY_CONFIG) {
checkUpdateVbatControls();
checkUpdateCurrentControls();
}
$("input[id='unsyncedPWMSwitch']").change(function() {
if ($(this).is(':checked')) {
$('div.unsyncedpwmfreq').show();
@ -678,6 +827,17 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
MOTOR_CONFIG.maxthrottle = parseInt($('input[name="maxthrottle"]').val());
MOTOR_CONFIG.mincommand = parseInt($('input[name="mincommand"]').val());
if(self.SHOW_OLD_BATTERY_CONFIG) {
MISC.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val());
MISC.vbatmaxcellvoltage = parseFloat($('input[name="maxcellvoltage"]').val());
MISC.vbatwarningcellvoltage = parseFloat($('input[name="warningcellvoltage"]').val());
MISC.vbatscale = parseInt($('input[name="voltagescale"]').val());
BF_CONFIG.currentscale = parseInt($('input[name="currentscale"]').val());
BF_CONFIG.currentoffset = parseInt($('input[name="currentoffset"]').val());
MISC.multiwiicurrentoutput = $('input[name="multiwiicurrentoutput"]').is(':checked') ? 1 : 0;
}
if(semver.gte(CONFIG.apiVersion, "1.14.0")) {
MOTOR_3D_CONFIG.deadband3d_low = parseInt($('input[name="3ddeadbandlow"]').val());
MOTOR_3D_CONFIG.deadband3d_high = parseInt($('input[name="3ddeadbandhigh"]').val());
@ -812,10 +972,35 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
function save_name() {
var next_callback = save_rx_config;
if(self.SHOW_OLD_BATTERY_CONFIG) {
next_callback = save_battery;
}
CONFIG.name = $.trim($('input[name="craftName"]').val());
MSP.send_message(MSPCodes.MSP_SET_NAME, mspHelper.crunch(MSPCodes.MSP_SET_NAME), false, next_callback);
}
// -----------------------------------------------
// Remove this when we officily retire BF 3.1.x
function save_battery() {
var next_callback = save_current;
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
MSP.send_message(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_VOLTAGE_METER_CONFIG), false, next_callback);
} else {
next_callback();
}
}
function save_current() {
var next_callback = save_rx_config;
if (semver.gte(CONFIG.flightControllerVersion, "3.1.0")) {
MSP.send_message(MSPCodes.MSP_SET_CURRENT_METER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_CURRENT_METER_CONFIG), false, next_callback);
} else {
next_callback();
}
}
// -----------------------------------------------
function save_rx_config() {
var next_callback = save_to_eeprom;
if (semver.gte(CONFIG.apiVersion, "1.20.0")) {