Skip to content

Commit 533d5de

Browse files
authored
Merge pull request #3942 from aruhier/pr_battery_module
fix: battery runtime estimation with negative sysfs values
2 parents d3c7ff6 + 4be1f3b commit 533d5de

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/modules/battery.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,18 @@ waybar::modules::Battery::getInfos() {
273273
// Scale these by the voltage to get μW/μWh.
274274

275275
uint32_t current_now = 0;
276+
int32_t _current_now_int = 0;
276277
bool current_now_exists = false;
277278
if (fs::exists(bat / "current_now")) {
278279
current_now_exists = true;
279-
std::ifstream(bat / "current_now") >> current_now;
280+
std::ifstream(bat / "current_now") >> _current_now_int;
280281
} else if (fs::exists(bat / "current_avg")) {
281282
current_now_exists = true;
282-
std::ifstream(bat / "current_avg") >> current_now;
283+
std::ifstream(bat / "current_avg") >> _current_now_int;
283284
}
285+
// Documentation ABI allows a negative value when discharging, positive
286+
// value when charging.
287+
current_now = std::abs(_current_now_int);
284288

285289
if (fs::exists(bat / "time_to_empty_now")) {
286290
time_to_empty_now_exists = true;
@@ -324,11 +328,15 @@ waybar::modules::Battery::getInfos() {
324328
}
325329

326330
uint32_t power_now = 0;
331+
int32_t _power_now_int = 0;
327332
bool power_now_exists = false;
328333
if (fs::exists(bat / "power_now")) {
329334
power_now_exists = true;
330-
std::ifstream(bat / "power_now") >> power_now;
335+
std::ifstream(bat / "power_now") >> _power_now_int;
331336
}
337+
// Some drivers (example: Qualcomm) exposes use a negative value when
338+
// discharging, positive value when charging.
339+
power_now = std::abs(_power_now_int);
332340

333341
uint32_t energy_now = 0;
334342
bool energy_now_exists = false;

0 commit comments

Comments
 (0)