Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -3130,6 +3130,12 @@
"motorsmAhDrawn": {
"message": "Amp. drawn:"
},
"motorsAmperageAverage5s": {
"message": "Amperage (5s avg):"
},
"motorsAmperageAverage10s": {
"message": "Amperage (10s avg):"
},
"motorsVoltageValue": {
"message": "$1 V"
},
Expand All @@ -3139,6 +3145,12 @@
"motorsmAhDrawnValue": {
"message": "$1 mAh"
},
"motorsAmperageAverage5sValue": {
"message": "$1 A"
},
"motorsAmperageAverage10sValue": {
"message": "$1 A"
},
"motorsText":{
"message": "Motors"
},
Expand Down Expand Up @@ -5333,6 +5345,12 @@
"powerBatteryAmperage": {
"message": "Amperage"
},
"powerBatteryAmperageAverage5s": {
"message": "Amperage (5s average)"
},
"powerBatteryAmperageAverage10s": {
"message": "Amperage (10s average)"
},
"powerBatteryCapacity": {
"message": "Capacity (mAh)"
},
Expand Down
18 changes: 18 additions & 0 deletions locales/zh_CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -2239,6 +2239,12 @@
"motorsmAhDrawn": {
"message": "已消耗电流:"
},
"motorsAmperageAverage5s": {
"message": "电流 (5秒平均):"
},
"motorsAmperageAverage10s": {
"message": "电流 (10秒平均):"
},
"motorsVoltageValue": {
"message": "$1 V"
},
Expand All @@ -2248,6 +2254,12 @@
"motorsmAhDrawnValue": {
"message": "$1 mAh"
},
"motorsAmperageAverage5sValue": {
"message": "$1 A"
},
"motorsAmperageAverage10sValue": {
"message": "$1 A"
},
"motorsText": {
"message": "电机"
},
Expand Down Expand Up @@ -4000,6 +4012,12 @@
"powerBatteryAmperage": {
"message": "电流"
},
"powerBatteryAmperageAverage5s": {
"message": "电流 (5秒平均)"
},
"powerBatteryAmperageAverage10s": {
"message": "电流 (10秒平均)"
},
"powerBatteryCapacity": {
"message": "容量 (mAh)"
},
Expand Down
55 changes: 55 additions & 0 deletions src/js/tabs/motors.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const motors = {
sensorGyroScale: 2000,
sensorAccelRate: 20,
sensorAccelScale: 2,
amperageHistory: [], // Store amperage readings with timestamps for average calculation
sensorSelectValues: {
gyroScale: {
1: 1,
Expand Down Expand Up @@ -77,6 +78,9 @@ motors.initialize = async function (callback) {
self.configHasChanged = false;
self.configChanges = {};

// Reset amperage history when initializing
self.amperageHistory = [];

// Update filtering defaults based on API version
const FILTER_DEFAULT = FC.getFilterDefaults();

Expand Down Expand Up @@ -463,6 +467,8 @@ motors.initialize = async function (callback) {
const motorVoltage = $(".motors-bat-voltage");
const motorMahDrawingElement = $(".motors-bat-mah-drawing");
const motorMahDrawnElement = $(".motors-bat-mah-drawn");
const motorAmperageAverage5sElement = $(".motors-bat-amperage-average-5s");
const motorAmperageAverage10sElement = $(".motors-bat-amperage-average-10s");

const rawDataTextElements = {
x: [],
Expand Down Expand Up @@ -639,6 +645,55 @@ motors.initialize = async function (callback) {
motorVoltage.text(i18n.getMessage("motorsVoltageValue", [FC.ANALOG.voltage]));
motorMahDrawingElement.text(i18n.getMessage("motorsADrawingValue", [FC.ANALOG.amperage.toFixed(2)]));
motorMahDrawnElement.text(i18n.getMessage("motorsmAhDrawnValue", [FC.ANALOG.mAhdrawn]));

// Calculate amperage averages using timestamp-based approach
const currentAmperage = FC.ANALOG.amperage;
const currentTimestamp = performance.now();

// Add current reading with timestamp
TABS.motors.amperageHistory.push({
value: currentAmperage,
timestamp: currentTimestamp,
});
Comment on lines +654 to +657
Copy link

Copilot AI Oct 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The amperage history array could grow indefinitely if the data collection runs for extended periods. Consider adding a maximum array size limit to prevent memory issues.

Copilot uses AI. Check for mistakes.


// Calculate time thresholds
const tenSecondsAgo = currentTimestamp - 10000;
const fiveSecondsAgo = currentTimestamp - 5000;

// Remove readings older than 10 seconds and calculate averages in one pass
const validReadings = [];
let amperageSum5s = 0;
let amperageSum10s = 0;
let count5s = 0;
let count10s = 0;

for (const reading of TABS.motors.amperageHistory) {
if (reading.timestamp >= tenSecondsAgo) {
validReadings.push(reading);
amperageSum10s += reading.value;
count10s++;

if (reading.timestamp >= fiveSecondsAgo) {
amperageSum5s += reading.value;
count5s++;
}
}
}

// Update history with only valid readings
TABS.motors.amperageHistory = validReadings;

// Calculate averages
const amperageAverage5s = count5s > 0 ? amperageSum5s / count5s : 0;
const amperageAverage10s = count10s > 0 ? amperageSum10s / count10s : 0;

// Display average amperages
motorAmperageAverage5sElement.text(
i18n.getMessage("motorsAmperageAverage5sValue", [amperageAverage5s.toFixed(2)]),
);
motorAmperageAverage10sElement.text(
i18n.getMessage("motorsAmperageAverage10sValue", [amperageAverage10s.toFixed(2)]),
);
}
}

Expand Down
53 changes: 53 additions & 0 deletions src/js/tabs/power.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,15 @@ import { initializeModalDialog } from "../utils/initializeModalDialog";
const power = {
supported: false,
analyticsChanges: {},
amperageHistory: [], // Store amperage readings with timestamps for average calculation
};

power.initialize = function (callback) {
const self = this;

// Reset amperage history when initializing
self.amperageHistory = [];

if (GUI.active_tab != "power") {
GUI.active_tab = "power";
}
Expand Down Expand Up @@ -224,6 +228,8 @@ power.initialize = function (callback) {
$(elementBatteryState).find(".voltage").attr("id", "battery-voltage");
$(elementBatteryState).find(".mah-drawn").attr("id", "battery-mah-drawn");
$(elementBatteryState).find(".amperage").attr("id", "battery-amperage");
$(elementBatteryState).find(".amperage-average-5s").attr("id", "battery-amperage-average-5s");
$(elementBatteryState).find(".amperage-average-10s").attr("id", "battery-amperage-average-10s");

destinationBatteryState.append(elementBatteryState.children());

Expand Down Expand Up @@ -332,6 +338,53 @@ power.initialize = function (callback) {
elementMspBatteryState.text(i18n.getMessage("powerMahValue", [FC.BATTERY_STATE.mAhDrawn]));
elementMspBatteryState = $(`${elementPrefix}-amperage .value`);
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [FC.BATTERY_STATE.amperage]));

// Calculate amperage averages using timestamp-based approach
const currentAmperage = FC.BATTERY_STATE.amperage;
const currentTimestamp = performance.now();

// Add current reading with timestamp
self.amperageHistory.push({
value: currentAmperage,
timestamp: currentTimestamp,
});

// Calculate time thresholds
const tenSecondsAgo = currentTimestamp - 10000;
const fiveSecondsAgo = currentTimestamp - 5000;

// Remove readings older than 10 seconds and calculate averages in one pass
const validReadings = [];
let amperageSum5s = 0;
let amperageSum10s = 0;
let count5s = 0;
let count10s = 0;

for (const reading of self.amperageHistory) {
if (reading.timestamp >= tenSecondsAgo) {
validReadings.push(reading);
amperageSum10s += reading.value;
count10s++;

if (reading.timestamp >= fiveSecondsAgo) {
amperageSum5s += reading.value;
count5s++;
}
}
}

// Update history with only valid readings
self.amperageHistory = validReadings;

// Calculate averages
const amperageAverage5s = count5s > 0 ? amperageSum5s / count5s : 0;
const amperageAverage10s = count10s > 0 ? amperageSum10s / count10s : 0;

// Display average amperages
elementMspBatteryState = $(`${elementPrefix}-amperage-average-5s .value`);
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [amperageAverage5s.toFixed(2)]));
elementMspBatteryState = $(`${elementPrefix}-amperage-average-10s .value`);
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [amperageAverage10s.toFixed(2)]));
});
}

Expand Down
2 changes: 2 additions & 0 deletions src/tabs/motors.html
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,8 @@
<span i18n="motorsVoltage" class="power_text"></span><span class="motors-bat-voltage power_value"></span>
<span i18n="motorsADrawing" class="power_text"></span><span class="motors-bat-mah-drawing power_value"></span>
<span i18n="motorsmAhDrawn" class="power_text"></span><span class="motors-bat-mah-drawn power_value"></span>
<span i18n="motorsAmperageAverage5s" class="power_text"></span><span class="motors-bat-amperage-average-5s power_value"></span>
<span i18n="motorsAmperageAverage10s" class="power_text"></span><span class="motors-bat-amperage-average-10s power_value"></span>
</div>
</div>
<div class="motors">
Expand Down
8 changes: 8 additions & 0 deletions src/tabs/power.html
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,14 @@
<td i18n="powerBatteryAmperage"></td>
<td class="value"></td>
</tr>
<tr class="amperage-average-5s">
<td i18n="powerBatteryAmperageAverage5s"></td>
<td class="value"></td>
</tr>
<tr class="amperage-average-10s">
<td i18n="powerBatteryAmperageAverage10s"></td>
<td class="value"></td>
</tr>
</tbody>
</table>

Expand Down