Damjan Jovanovic : ntdll: Implement fill_battery_state() on FreeBSD.
Alexandre Julliard
julliard at winehq.org
Tue Dec 7 15:58:45 CST 2021
Module: wine
Branch: master
Commit: 36af18a4f13b5e9ffbf8be71ea0aaad7321cefb4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=36af18a4f13b5e9ffbf8be71ea0aaad7321cefb4
Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date: Sat Dec 4 13:23:51 2021 +0200
ntdll: Implement fill_battery_state() on FreeBSD.
Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/unix/system.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index 941c69190fb..d1a40e47bbf 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -3516,6 +3516,51 @@ static NTSTATUS fill_battery_state( SYSTEM_BATTERY_STATE *bs )
return STATUS_SUCCESS;
}
+#elif defined(__FreeBSD__)
+
+#include <dev/acpica/acpiio.h>
+
+static NTSTATUS fill_battery_state( SYSTEM_BATTERY_STATE *bs )
+{
+ size_t len;
+ int state = 0;
+ int rate_mW = 0;
+ int time_mins = -1;
+ int life_percent = 0;
+
+ bs->BatteryPresent = TRUE;
+ len = sizeof(state);
+ bs->BatteryPresent &= !sysctlbyname("hw.acpi.battery.state", &state, &len, NULL, 0);
+ len = sizeof(rate_mW);
+ bs->BatteryPresent &= !sysctlbyname("hw.acpi.battery.rate", &rate_mW, &len, NULL, 0);
+ len = sizeof(time_mins);
+ bs->BatteryPresent &= !sysctlbyname("hw.acpi.battery.time", &time_mins, &len, NULL, 0);
+ len = sizeof(life_percent);
+ bs->BatteryPresent &= !sysctlbyname("hw.acpi.battery.life", &life_percent, &len, NULL, 0);
+
+ if (bs->BatteryPresent)
+ {
+ bs->AcOnLine = (time_mins == -1);
+ bs->Charging = state & ACPI_BATT_STAT_CHARGING;
+ bs->Discharging = state & ACPI_BATT_STAT_DISCHARG;
+
+ bs->Rate = (rate_mW >= 0 ? -rate_mW : 0);
+ if (time_mins >= 0 && life_percent > 0)
+ {
+ bs->EstimatedTime = 60 * time_mins;
+ bs->RemainingCapacity = bs->EstimatedTime * rate_mW / 3600;
+ bs->MaxCapacity = bs->RemainingCapacity * 100 / life_percent;
+ }
+ else
+ {
+ bs->EstimatedTime = ~0u;
+ bs->RemainingCapacity = life_percent;
+ bs->MaxCapacity = 100;
+ }
+ }
+ return STATUS_SUCCESS;
+}
+
#else
static NTSTATUS fill_battery_state( SYSTEM_BATTERY_STATE *bs )
More information about the wine-cvs
mailing list