[Linux] Fix battery sometimes showing 127% (#143)

This commit is contained in:
Tim Gromeyer
2025-06-05 09:16:04 +02:00
committed by GitHub
parent 43d703423a
commit 9b907fdec4

View File

@@ -4,6 +4,7 @@
#include <QMap> #include <QMap>
#include <QString> #include <QString>
#include <QObject> #include <QObject>
#include <climits>
#include "airpods_packets.h" #include "airpods_packets.h"
@@ -152,20 +153,17 @@ public:
auto [isRightCharging, rawRightBattery] = formatBattery(rawRightBatteryByte); auto [isRightCharging, rawRightBattery] = formatBattery(rawRightBatteryByte);
auto [isCaseCharging, rawCaseBattery] = formatBattery(rawCaseBatteryByte); auto [isCaseCharging, rawCaseBattery] = formatBattery(rawCaseBatteryByte);
// If raw byte is 0xFF or (0x7F and charging), use the last known level if (rawLeftBattery == CHAR_MAX) {
if (rawLeftBatteryByte == 0xFF || (rawLeftBatteryByte == 0x7F && isLeftCharging)) { rawLeftBattery = states.value(Component::Left).level; // Use last valid level
rawLeftBatteryByte = states.value(Component::Left).level; // Use last valid level
isLeftCharging = states.value(Component::Left).status == BatteryStatus::Charging; isLeftCharging = states.value(Component::Left).status == BatteryStatus::Charging;
} }
// If raw byte is 0xFF or (0x7F and charging), use the last known level if (rawRightBattery == CHAR_MAX) {
if (rawRightBatteryByte == 0xFF || (rawRightBatteryByte == 0x7F && isRightCharging)) {
rawRightBattery = states.value(Component::Right).level; // Use last valid level rawRightBattery = states.value(Component::Right).level; // Use last valid level
isRightCharging = states.value(Component::Right).status == BatteryStatus::Charging; isRightCharging = states.value(Component::Right).status == BatteryStatus::Charging;
} }
// If raw byte is 0xFF or (0x7F and charging), use the last known level if (rawCaseBattery == CHAR_MAX) {
if (rawCaseBatteryByte == 0xFF || (rawCaseBatteryByte == 0x7F && isCaseCharging)) {
rawCaseBattery = states.value(Component::Case).level; // Use last valid level rawCaseBattery = states.value(Component::Case).level; // Use last valid level
isCaseCharging = states.value(Component::Case).status == BatteryStatus::Charging; isCaseCharging = states.value(Component::Case).status == BatteryStatus::Charging;
} }