Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
37 changes: 37 additions & 0 deletions src/js/tabs/motors.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ const motors = {
sensorGyroScale: 2000,
sensorAccelRate: 20,
sensorAccelScale: 2,
amperageHistory5s: [], // Store last 5 seconds of amperage readings for average calculation
amperageHistorySize5s: 20, // Number of readings to keep for 5 seconds average (4Hz * 5s = 20)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: 40, // Number of readings to keep for 10 seconds average (4Hz * 10s = 40)
Comment on lines +37 to +39
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 motors tab uses different update rate assumptions (4Hz) compared to the power tab (5Hz). This inconsistency could lead to different averaging behaviors between tabs and should be standardized.

Suggested change
amperageHistorySize5s: 20, // Number of readings to keep for 5 seconds average (4Hz * 5s = 20)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: 40, // Number of readings to keep for 10 seconds average (4Hz * 10s = 40)
amperageHistorySize5s: 25, // Number of readings to keep for 5 seconds average (5Hz * 5s = 25)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: 50, // Number of readings to keep for 10 seconds average (5Hz * 10s = 50)

Copilot uses AI. Check for mistakes.
sensorSelectValues: {
gyroScale: {
1: 1,
Expand Down Expand Up @@ -77,6 +81,10 @@ motors.initialize = async function (callback) {
self.configHasChanged = false;
self.configChanges = {};

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

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

Expand Down Expand Up @@ -463,6 +471,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 +649,33 @@ 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
const currentAmperage = FC.ANALOG.amperage;

// 5 seconds average
TABS.motors.amperageHistory5s.push(currentAmperage);
if (TABS.motors.amperageHistory5s.length > TABS.motors.amperageHistorySize5s) {
TABS.motors.amperageHistory5s.shift();
}
const amperageSum5s = TABS.motors.amperageHistory5s.reduce((sum, value) => sum + value, 0);
const amperageAverage5s = amperageSum5s / TABS.motors.amperageHistory5s.length;

// 10 seconds average
TABS.motors.amperageHistory10s.push(currentAmperage);
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.

Using TABS.motors instead of self is inconsistent with the pattern used in the power tab and makes the code less maintainable. Consider using self for consistency.

Copilot uses AI. Check for mistakes.
if (TABS.motors.amperageHistory10s.length > TABS.motors.amperageHistorySize10s) {
TABS.motors.amperageHistory10s.shift();
}
const amperageSum10s = TABS.motors.amperageHistory10s.reduce((sum, value) => sum + value, 0);
const amperageAverage10s = amperageSum10s / TABS.motors.amperageHistory10s.length;

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

Expand Down
35 changes: 35 additions & 0 deletions src/js/tabs/power.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,19 @@ import { initializeModalDialog } from "../utils/initializeModalDialog";
const power = {
supported: false,
analyticsChanges: {},
amperageHistory5s: [], // Store last 5 seconds of amperage readings for average calculation
amperageHistorySize5s: 25, // Number of readings to keep for 5 seconds average (5Hz * 5s = 25)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: 50, // Number of readings to keep for 10 seconds average (5Hz * 10s = 50)
Comment on lines 11 to +17
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 comment assumes a 5Hz update rate, but this assumption should be documented or made configurable since update rates may vary depending on hardware or configuration.

Suggested change
const power = {
supported: false,
analyticsChanges: {},
amperageHistory5s: [], // Store last 5 seconds of amperage readings for average calculation
amperageHistorySize5s: 25, // Number of readings to keep for 5 seconds average (5Hz * 5s = 25)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: 50, // Number of readings to keep for 10 seconds average (5Hz * 10s = 50)
// Configurable update rate in Hz (readings per second). Change this value if hardware/configuration differs.
const updateRateHz = 5;
const power = {
supported: false,
analyticsChanges: {},
amperageHistory5s: [], // Store last 5 seconds of amperage readings for average calculation
amperageHistorySize5s: updateRateHz * 5, // Number of readings to keep for 5 seconds average (updateRateHz * 5s)
amperageHistory10s: [], // Store last 10 seconds of amperage readings for average calculation
amperageHistorySize10s: updateRateHz * 10, // Number of readings to keep for 10 seconds average (updateRateHz * 10s)

Copilot uses AI. Check for mistakes.
};

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

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

if (GUI.active_tab != "power") {
GUI.active_tab = "power";
}
Expand Down Expand Up @@ -224,6 +232,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 +342,31 @@ 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
const currentAmperage = FC.BATTERY_STATE.amperage;

// 5 seconds average
self.amperageHistory5s.push(currentAmperage);
if (self.amperageHistory5s.length > self.amperageHistorySize5s) {
self.amperageHistory5s.shift();
}
const amperageSum5s = self.amperageHistory5s.reduce((sum, value) => sum + value, 0);
const amperageAverage5s = amperageSum5s / self.amperageHistory5s.length;

// 10 seconds average
self.amperageHistory10s.push(currentAmperage);
if (self.amperageHistory10s.length > self.amperageHistorySize10s) {
self.amperageHistory10s.shift();
}
const amperageSum10s = self.amperageHistory10s.reduce((sum, value) => sum + value, 0);
const amperageAverage10s = amperageSum10s / self.amperageHistory10s.length;

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