1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-25 17:25:14 +03:00

Add capacity settings and data

This commit is contained in:
Michel Pastor 2018-02-18 05:23:22 +01:00
parent f0f1063dc1
commit 6d922bee2c
8 changed files with 174 additions and 16 deletions

View file

@ -406,6 +406,42 @@
"initialSetupBattery": { "initialSetupBattery": {
"message": "Battery voltage:" "message": "Battery voltage:"
}, },
"initialSetupBatteryDetectedCells": {
"message": "Battery detected cell count:"
},
"initialSetupBatteryDetectedCellsValue": {
"message": "$1"
},
"initialSetupBatteryPercentage": {
"message": "Battery left:"
},
"initialSetupBatteryPercentageValue": {
"message": "$1 %"
},
"initialSetupBatteryRemainingCapacity": {
"message": "Battery remaining capacity"
},
"initialSetupBatteryRemainingCapacityValue": {
"message": "$1 $2"
},
"initialSetupBatteryFull": {
"message": "Battery full when plugged in"
},
"initialSetupBatteryFullValue": {
"message": "$1"
},
"initialSetupBatteryThresholds": {
"message": "Battery use cap thresholds"
},
"initialSetupBatteryThresholdsValue": {
"message": "$1"
},
"initialSetup_Wh_drawn": {
"message": "Capacity drawn:"
},
"initialSetup_Wh_drawnValue": {
"message": "$1 Wh"
},
"initialSetupBatteryValue": { "initialSetupBatteryValue": {
"message": "$1 V" "message": "$1 V"
}, },
@ -693,6 +729,21 @@
"configurationBatteryMultiwiiCurrent": { "configurationBatteryMultiwiiCurrent": {
"message": "Enable support for legacy Multiwii MSP current output" "message": "Enable support for legacy Multiwii MSP current output"
}, },
"configurationBatteryCapacity": {
"message": "Battery Capacity"
},
"configurationBatteryCapacityValue": {
"message": "Capacity"
},
"configurationBatteryCapacityWarning": {
"message": "Warning Capacity"
},
"configurationBatteryCapacityCritical": {
"message": "Critical Capacity"
},
"configurationBatteryCapacityUnit": {
"message": "Battery Capacity Unit"
},
"configuration3d": { "configuration3d": {
"message": "3D" "message": "3D"
}, },

View file

@ -221,7 +221,11 @@ var FC = {
amperage: 0, amperage: 0,
power: 0, power: 0,
cell_count: 0, cell_count: 0,
battery_percentage: 0 battery_percentage: 0,
battery_full_when_plugged_in: false,
use_capacity_thresholds: false,
battery_remaining_capacity: 0,
battery_flags: 0
}; };
ARMING_CONFIG = { ARMING_CONFIG = {
@ -253,7 +257,7 @@ var FC = {
battery_capacity: 0, battery_capacity: 0,
battery_capacity_warning: 0, battery_capacity_warning: 0,
battery_capacity_critical: 0, battery_capacity_critical: 0,
battery_capacity_unit: 0 battery_capacity_unit: 'mAh'
}; };
BATTERY_CONFIG = { BATTERY_CONFIG = {

View file

@ -251,6 +251,12 @@ var mspHelper = (function (gui) {
offset += 2; offset += 2;
ANALOG.amperage = data.getInt16(offset, true) / 100; // A ANALOG.amperage = data.getInt16(offset, true) / 100; // A
offset += 2; offset += 2;
var battery_flags = data.getUint8(offset++);
ANALOG.battery_full_when_plugged_in = (battery_flags & 1 ? true : false);
ANALOG.use_capacity_thresholds = ((battery_flags & 2) >> 1 ? true : false);
ANALOG.battery_state = (battery_flags & 12) >> 2;
ANALOG.battery_remaining_capacity = data.getUint32(offset, true);
offset += 4;
//noinspection JSValidateTypes //noinspection JSValidateTypes
dataHandler.analog_last_received_timestamp = Date.now(); dataHandler.analog_last_received_timestamp = Date.now();
break; break;
@ -330,7 +336,6 @@ var mspHelper = (function (gui) {
MISC.sensors_baudrate = data.getUint8(offset++); MISC.sensors_baudrate = data.getUint8(offset++);
MISC.gps_ubx_sbas = data.getInt8(offset++); MISC.gps_ubx_sbas = data.getInt8(offset++);
MISC.rssi_channel = data.getUint8(offset++); MISC.rssi_channel = data.getUint8(offset++);
MISC.placeholder2 = data.getUint8(offset++);
MISC.mag_declination = data.getInt16(offset, 1) / 10; // -18000-18000 MISC.mag_declination = data.getInt16(offset, 1) / 10; // -18000-18000
offset += 2; offset += 2;
MISC.vbatscale = data.getUint16(offset, true); MISC.vbatscale = data.getUint16(offset, true);
@ -347,7 +352,7 @@ var mspHelper = (function (gui) {
offset += 4; offset += 4;
MISC.battery_capacity_critical = data.getUint32(offset, true); MISC.battery_capacity_critical = data.getUint32(offset, true);
offset += 4; offset += 4;
MISC.battery_capacity_unit = data.getUint8(offset++); MISC.battery_capacity_unit = (data.getUint8(offset++) ? 'mWh' : 'mAh');
break; break;
case MSPCodes.MSPV2_INAV_BATTERY_CONFIG: case MSPCodes.MSPV2_INAV_BATTERY_CONFIG:
BATTERY_CONFIG.vbatscale = data.getUint16(offset, true); BATTERY_CONFIG.vbatscale = data.getUint16(offset, true);
@ -368,7 +373,7 @@ var mspHelper = (function (gui) {
offset += 4; offset += 4;
BATTERY_CONFIG.capacity_critical = data.getUint32(offset, true); BATTERY_CONFIG.capacity_critical = data.getUint32(offset, true);
offset += 4; offset += 4;
BATTERY_CONFIG.capacity_unit = data.getUint8(offset++); BATTERY_CONFIG.battery_capacity_unit = (data.getUint8(offset++) ? 'mWh' : 'mAh');
break; break;
case MSPCodes.MSP_3D: case MSPCodes.MSP_3D:
_3D.deadband3d_low = data.getUint16(offset, true); _3D.deadband3d_low = data.getUint16(offset, true);
@ -1379,9 +1384,7 @@ var mspHelper = (function (gui) {
buffer.push(MISC.gps_type); buffer.push(MISC.gps_type);
buffer.push(MISC.sensors_baudrate); buffer.push(MISC.sensors_baudrate);
buffer.push(MISC.gps_ubx_sbas); buffer.push(MISC.gps_ubx_sbas);
buffer.push(MISC.multiwiicurrentoutput);
buffer.push(MISC.rssi_channel); buffer.push(MISC.rssi_channel);
buffer.push(MISC.placeholder2);
buffer.push(lowByte(Math.round(MISC.mag_declination * 10))); buffer.push(lowByte(Math.round(MISC.mag_declination * 10)));
buffer.push(highByte(Math.round(MISC.mag_declination * 10))); buffer.push(highByte(Math.round(MISC.mag_declination * 10)));
buffer.push(lowByte(MISC.vbatscale)); buffer.push(lowByte(MISC.vbatscale));
@ -1398,7 +1401,7 @@ var mspHelper = (function (gui) {
buffer.push(specificByte(MISC.battery_capacity_warning, byte_index)); buffer.push(specificByte(MISC.battery_capacity_warning, byte_index));
for (byte_index = 0; byte_index < 4; ++byte_index) for (byte_index = 0; byte_index < 4; ++byte_index)
buffer.push(specificByte(MISC.battery_capacity_critical, byte_index)); buffer.push(specificByte(MISC.battery_capacity_critical, byte_index));
buffer.push(MISC.battery_capacity_unit); buffer.push((MISC.battery_capacity_unit == 'mAh') ? 0 : 1);
break; break;
case MSPCodes.MSPV2_INAV_SET_BATTERY_CONFIG: case MSPCodes.MSPV2_INAV_SET_BATTERY_CONFIG:
buffer.push(lowByte(BATTERY_CONFIG.vbatscale)); buffer.push(lowByte(BATTERY_CONFIG.vbatscale));

View file

@ -97,7 +97,7 @@ helper.periodicStatusUpdater = (function () {
}); });
} }
if (ANALOG.voltage < warn) { if (((semver.gte(CONFIG.flightControllerVersion, '1.8.1')) && (((ANALOG.use_capacity_thresholds) && (ANALOG.battery_remaining_capacity <= (MISC.battery_capacity_warning - MISC.battery_capacity_critical))) || ((!ANALOG.use_capacity_thresholds) && (ANALOG.voltage < warn))) || (ANALOG.voltage < min)) || ((semver.lt(CONFIG.flightControllerVersion, '1.8.1')) && (ANALOG.voltage < warn))) {
$(".battery-status").css('background-color', '#D42133'); $(".battery-status").css('background-color', '#D42133');
} else { } else {
$(".battery-status").css('background-color', '#59AA29'); $(".battery-status").css('background-color', '#59AA29');

View file

@ -445,6 +445,38 @@
</div> </div>
</div> </div>
</div> </div>
<div class="config-section gui_box grey requires-v1_8_1">
<div class="gui_box_titlebar">
<div class="spacer_box_title" data-i18n="configurationBatteryCapacity"></div>
</div>
<div class="spacer_box">
<div class="number">
<input type="number" id="battery_capacity" name="battery_capacity" step="1" min="0" max="4294967296" />
<label for="battery_capacity">
<span data-i18n="configurationBatteryCapacityValue"></span>
</label>
</div>
<div class="number">
<input type="number" id="battery_capacity_warning" name="battery_capacity_warning" step="1" min="0" max="4294967296" />
<label for="battery_capacity_warning">
<span data-i18n="configurationBatteryCapacityWarning"></span>
</label>
</div>
<div class="number">
<input type="number" id="battery_capacity_critical" name="battery_capacity_critical" step="1" min="0" max="4294967296" />
<label for="battery_capacity_critical">
<span data-i18n="configurationBatteryCapacityCritical"></span>
</label>
</div>
<div class="select">
<select id="battery_capacity_unit">
<option value="mAh">mAh</option>
<option value="mWh">mWh</option>
</select>
<label for="battery_capacity_unit"> <span data-i18n="configurationBatteryCapacityUnit"></span></label>
</div>
</div>
</div>
<div class="config-section gui_box grey other"> <div class="config-section gui_box grey other">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">

View file

@ -332,7 +332,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
$('#voltagescale').attr('max', '255'); $('#voltagescale').attr('max', '255');
} }
// fill battery // fill battery voltage
$('#mincellvoltage').val(MISC.vbatmincellvoltage); $('#mincellvoltage').val(MISC.vbatmincellvoltage);
$('#maxcellvoltage').val(MISC.vbatmaxcellvoltage); $('#maxcellvoltage').val(MISC.vbatmaxcellvoltage);
$('#warningcellvoltage').val(MISC.vbatwarningcellvoltage); $('#warningcellvoltage').val(MISC.vbatwarningcellvoltage);
@ -343,6 +343,12 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
$('#currentoffset').val(BF_CONFIG.currentoffset); $('#currentoffset').val(BF_CONFIG.currentoffset);
$('#multiwiicurrentoutput').prop('checked', MISC.multiwiicurrentoutput); $('#multiwiicurrentoutput').prop('checked', MISC.multiwiicurrentoutput);
// fill battery capacity
$('#battery_capacity').val(MISC.battery_capacity);
$('#battery_capacity_warning').val(MISC.battery_capacity_warning);
$('#battery_capacity_critical').val(MISC.battery_capacity_critical);
$('#battery_capacity_unit').val(MISC.battery_capacity_unit);
var escProtocols = FC.getEscProtocols(); var escProtocols = FC.getEscProtocols();
var servoRates = FC.getServoRates(); var servoRates = FC.getServoRates();
@ -587,6 +593,12 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
$(".requires-v1_7").hide(); $(".requires-v1_7").hide();
} }
if (semver.gte(CONFIG.flightControllerVersion, "1.8.1")) {
$(".requires-v1_8_1").show();
} else {
$(".requires-v1_8_1").hide();
}
$('#3ddeadbandlow').val(_3D.deadband3d_low); $('#3ddeadbandlow').val(_3D.deadband3d_low);
$('#3ddeadbandhigh').val(_3D.deadband3d_high); $('#3ddeadbandhigh').val(_3D.deadband3d_high);
$('#3dneutral').val(_3D.neutral3d); $('#3dneutral').val(_3D.neutral3d);
@ -664,6 +676,11 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
MISC.vbatwarningcellvoltage = parseFloat($('#warningcellvoltage').val()); MISC.vbatwarningcellvoltage = parseFloat($('#warningcellvoltage').val());
MISC.vbatscale = parseInt($('#voltagescale').val()); MISC.vbatscale = parseInt($('#voltagescale').val());
MISC.battery_capacity = parseInt($('#battery_capacity').val());
MISC.battery_capacity_warning = parseInt($('#battery_capacity_warning').val());
MISC.battery_capacity_critical = parseInt($('#battery_capacity_critical').val());
MISC.battery_capacity_unit = $('#battery_capacity_unit').val();
BF_CONFIG.currentscale = parseInt($('#currentscale').val()); BF_CONFIG.currentscale = parseInt($('#currentscale').val());
BF_CONFIG.currentoffset = parseInt($('#currentoffset').val()); BF_CONFIG.currentoffset = parseInt($('#currentoffset').val());
MISC.multiwiicurrentoutput = ~~$('#multiwiicurrentoutput').is(':checked'); // ~~ boolean to decimal conversion MISC.multiwiicurrentoutput = ~~$('#multiwiicurrentoutput').is(':checked'); // ~~ boolean to decimal conversion

View file

@ -89,17 +89,41 @@
<div class="spacer_box"> <div class="spacer_box">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="cf_table"> <table width="100%" border="0" cellpadding="0" cellspacing="0" class="cf_table">
<tbody> <tbody>
<tr class="requires-v1_8_1">
<td data-i18n="initialSetupBatteryDetectedCells"></td>
<td class="bat-cells">0</td>
</tr>
<tr> <tr>
<td data-i18n="initialSetupBattery"></td> <td data-i18n="initialSetupBattery"></td>
<td class="bat-voltage">0 V</td> <td class="bat-voltage">0 V</td>
</tr> </tr>
<tr class="requires-v1_8_1">
<td data-i18n="initialSetupBatteryPercentage"></td>
<td class="bat-percent">0 %</td>
</tr>
<tr class="requires-v1_8_1">
<td data-i18n="initialSetupBatteryRemainingCapacity"></td>
<td class="bat-remain-cap">NA</td>
</tr>
<tr class="requires-v1_8_1">
<td data-i18n="initialSetupBatteryFull"></td>
<td class="bat-full">0</td>
</tr>
<tr class="requires-v1_8_1">
<td data-i18n="initialSetupBatteryThresholds"></td>
<td class="bat-thresh">0</td>
</tr>
<tr>
<td data-i18n="initialSetupDrawing"></td>
<td class="bat-mah-drawing">0.00 A</td>
</tr>
<tr> <tr>
<td data-i18n="initialSetupDrawn"></td> <td data-i18n="initialSetupDrawn"></td>
<td class="bat-mah-drawn">0 mAh</td> <td class="bat-mah-drawn">0 mAh</td>
</tr> </tr>
<tr> <tr class="requires-v1_8_1">
<td data-i18n="initialSetupDrawing"></td> <td data-i18n="initialSetup_Wh_drawn"></td>
<td class="bat-mah-drawing">0.00 A</td> <td class="bat-mwh-drawn">0 Wh</td>
</tr> </tr>
<tr class="noboarder"> <tr class="noboarder">
<td data-i18n="initialSetupRSSI"></td> <td data-i18n="initialSetupRSSI"></td>

View file

@ -15,11 +15,18 @@ TABS.setup.initialize = function (callback) {
var loadChainer = new MSPChainerClass(); var loadChainer = new MSPChainerClass();
loadChainer.setChain([ var loadChain = [
mspHelper.loadBfConfig, mspHelper.loadBfConfig,
mspHelper.loadMisc,
mspHelper.queryFcStatus mspHelper.queryFcStatus
]); ];
if (semver.gte(CONFIG.flightControllerVersion, '1.8.1')) {
loadChain.push(mspHelper.loadMiscV2);
} else {
loadChain.push(mspHelper.loadMisc);
}
loadChainer.setChain(loadChain);
loadChainer.setExitPoint(load_html); loadChainer.setExitPoint(load_html);
loadChainer.execute(); loadChainer.execute();
@ -77,7 +84,13 @@ TABS.setup.initialize = function (callback) {
// cached elements // cached elements
var bat_voltage_e = $('.bat-voltage'), var bat_voltage_e = $('.bat-voltage'),
bat_percent_e = $('.bat-percent'),
bat_remaining_e = $('.bat-remain-cap'),
bat_cells_e = $('.bat-cells'),
bat_thresh_e = $('.bat-thresh'),
bat_full_e = $('.bat-full'),
bat_mah_drawn_e = $('.bat-mah-drawn'), bat_mah_drawn_e = $('.bat-mah-drawn'),
bat_mwh_drawn_e = $('.bat-mwh-drawn'),
bat_mah_drawing_e = $('.bat-mah-drawing'), bat_mah_drawing_e = $('.bat-mah-drawing'),
rssi_e = $('.rssi'), rssi_e = $('.rssi'),
gpsFix_e = $('.gpsFixType'), gpsFix_e = $('.gpsFixType'),
@ -133,9 +146,23 @@ TABS.setup.initialize = function (callback) {
helper.mspBalancedInterval.add('setup_data_pull_fast', 40, 1, get_fast_data); helper.mspBalancedInterval.add('setup_data_pull_fast', 40, 1, get_fast_data);
helper.mspBalancedInterval.add('setup_data_pull_slow', 250, 1, get_slow_data); helper.mspBalancedInterval.add('setup_data_pull_slow', 250, 1, get_slow_data);
if (semver.lt(CONFIG.flightControllerVersion, '1.8.1')) {
$('.requires-v1_8_1').hide();
}
helper.interval.add('gui_analog_update', function () { helper.interval.add('gui_analog_update', function () {
bat_cells_e.text(chrome.i18n.getMessage('initialSetupBatteryDetectedCellsValue', [ANALOG.cell_count]));
bat_voltage_e.text(chrome.i18n.getMessage('initialSetupBatteryValue', [ANALOG.voltage])); bat_voltage_e.text(chrome.i18n.getMessage('initialSetupBatteryValue', [ANALOG.voltage]));
remaining_capacity_wh_decimals = ANALOG.battery_remaining_capacity.toString().length < 5 ? 3 : (7 - ANALOG.battery_remaining_capacity.toString().length);
remaining_capacity_value = MISC.battery_capacity_unit == 'mAh' ? ANALOG.battery_remaining_capacity : (ANALOG.battery_remaining_capacity / 1000).toFixed(remaining_capacity_wh_decimals < 0 ? 0 : remaining_capacity_wh_decimals);
remaining_capacity_unit = MISC.battery_capacity_unit == 'mAh' ? 'mAh' : 'Wh';
bat_remaining_e.text(chrome.i18n.getMessage('initialSetupBatteryRemainingCapacityValue', ((MISC.battery_capacity > 0) && ANALOG.battery_full_when_plugged_in) ? [remaining_capacity_value, remaining_capacity_unit] : ['NA', '']));
bat_percent_e.text(chrome.i18n.getMessage('initialSetupBatteryPercentageValue', [ANALOG.battery_percentage]));
bat_full_e.text(chrome.i18n.getMessage('initialSetupBatteryFullValue', [ANALOG.battery_full_when_plugged_in]));
bat_thresh_e.text(chrome.i18n.getMessage('initialSetupBatteryThresholdsValue', [ANALOG.use_capacity_thresholds]));
bat_mah_drawn_e.text(chrome.i18n.getMessage('initialSetupBatteryMahValue', [ANALOG.mAhdrawn])); bat_mah_drawn_e.text(chrome.i18n.getMessage('initialSetupBatteryMahValue', [ANALOG.mAhdrawn]));
capacity_drawn_decimals = ANALOG.mWhdrawn.toString().length < 5 ? 3 : (7 - ANALOG.mWhdrawn.toString().length);
bat_mwh_drawn_e.text(chrome.i18n.getMessage('initialSetup_Wh_drawnValue', [(ANALOG.mWhdrawn / 1000).toFixed(capacity_drawn_decimals < 0 ? 0 : capacity_drawn_decimals)]));
bat_mah_drawing_e.text(chrome.i18n.getMessage('initialSetupBatteryAValue', [ANALOG.amperage.toFixed(2)])); bat_mah_drawing_e.text(chrome.i18n.getMessage('initialSetupBatteryAValue', [ANALOG.amperage.toFixed(2)]));
rssi_e.text(chrome.i18n.getMessage('initialSetupRSSIValue', [((ANALOG.rssi / 1023) * 100).toFixed(0)])); rssi_e.text(chrome.i18n.getMessage('initialSetupRSSIValue', [((ANALOG.rssi / 1023) * 100).toFixed(0)]));
}, 100, true); }, 100, true);