summaryrefslogtreecommitdiff
path: root/src/openbsd/up-backend.c
diff options
context:
space:
mode:
authorLandry Breuil <landry@rhaalovely.net>2011-03-19 19:05:01 +0100
committerRichard Hughes <richard@hughsie.com>2011-03-21 18:40:21 +0000
commit08227a6416cba6cbac3b3e9b7a97d982bfa78ca7 (patch)
tree5d285675cde9a4e67b0510df3b35b4282d4a7ef0 /src/openbsd/up-backend.c
parent83e1e5693827122e4e25ac309f7667a87e219ac9 (diff)
openbsd: handle case when power is reported directly as Wh
Signed-off-by: Richard Hughes <richard@hughsie.com>
Diffstat (limited to 'src/openbsd/up-backend.c')
-rw-r--r--src/openbsd/up-backend.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/openbsd/up-backend.c b/src/openbsd/up-backend.c
index c59d5e4..25f782d 100644
--- a/src/openbsd/up-backend.c
+++ b/src/openbsd/up-backend.c
@@ -262,6 +262,7 @@ up_backend_update_ac_state(UpDevice* device)
return ret;
g_object_get (device, "online", &cur_is_online, (void*) NULL);
+ /* XXX use acpiac0.indicator0 if available */
new_is_online = (a.ac_state == APM_AC_ON ? TRUE : FALSE);
if (cur_is_online != new_is_online)
{
@@ -293,10 +294,13 @@ up_backend_update_battery_state(UpDevice* device)
"time-to-empty", &cur_time_to_empty,
(void*) NULL);
+ /* XXX use acpibat0.raw0 if available */
new_state = up_backend_apm_get_battery_state_value(a.battery_state);
// if percentage/minutes goes down or ac is off, we're likely discharging..
if (percentage < a.battery_life || cur_time_to_empty < new_time_to_empty || a.ac_state == APM_AC_OFF)
new_state = UP_DEVICE_STATE_DISCHARGING;
+ if (a.ac_state == APM_AC_ON)
+ new_state = UP_DEVICE_STATE_CHARGING;
// zero out new_time_to empty if we're not discharging
new_time_to_empty = (new_state == UP_DEVICE_STATE_DISCHARGING ? a.minutes_left : 0);
@@ -321,7 +325,7 @@ up_backend_update_battery_state(UpDevice* device)
static void
up_backend_update_acpibat_state(UpDevice* device, struct sensordev s)
{
- enum sensor_type type;
+ enum sensor_type type, typev = SENSOR_INTEGER;
int numt;
gdouble bst_volt, bif_dvolt, bst_rate, bif_lastfullcap, bst_cap, bif_dcap, bif_lowcap, capacity;
struct sensor sens;
@@ -338,14 +342,20 @@ up_backend_update_acpibat_state(UpDevice* device, struct sensordev s)
else if (slen > 0 && (sens.flags & SENSOR_FINVALID) == 0) {
if (sens.type == SENSOR_VOLTS_DC && !strcmp(sens.desc, "current voltage"))
bst_volt = sens.value / 1000000.0f;
- if (sens.type == SENSOR_AMPHOUR && !strcmp(sens.desc, "last full capacity"))
+ if ((sens.type == SENSOR_AMPHOUR || sens.type == SENSOR_WATTHOUR) && !strcmp(sens.desc, "last full capacity")) {
+ typev = sens.type;
bif_lastfullcap = sens.value / 1000000.0f;
- if (sens.type == SENSOR_AMPHOUR && !strcmp(sens.desc, "low capacity"))
+ }
+ if ((sens.type == SENSOR_AMPHOUR || sens.type == SENSOR_WATTHOUR) && !strcmp(sens.desc, "low capacity")) {
+ typev = sens.type;
bif_lowcap = sens.value / 1000000.0f;
- if (sens.type == SENSOR_AMPHOUR && !strcmp(sens.desc, "remaining capacity"))
+ }
+ if ((sens.type == SENSOR_AMPHOUR || sens.type == SENSOR_WATTHOUR) && !strcmp(sens.desc, "remaining capacity")) {
+ typev = sens.type;
bst_cap = sens.value / 1000000.0f;
+ }
if (sens.type == SENSOR_INTEGER && !strcmp(sens.desc, "rate"))
- bst_rate = sens.value / 1.0f;
+ bst_rate = sens.value / 1000.0f;
/*
bif_dvolt = "voltage" = unused ?
capacity = lastfull/dcap * 100 ?
@@ -355,11 +365,17 @@ up_backend_update_acpibat_state(UpDevice* device, struct sensordev s)
}
}
}
+ if (typev == SENSOR_AMPHOUR) {
+ bst_cap *= bst_volt;
+ bif_lowcap *= bst_volt;
+ bif_lastfullcap *= bst_volt;
+ bst_rate *= bst_volt;
+ }
g_object_set (device,
- "energy", bst_cap * bst_volt,
- "energy-full", bif_lastfullcap * bst_volt,
- "energy-rate", bst_rate * bst_volt,
- "energy-empty", bif_lowcap * bst_volt,
+ "energy", bst_cap,
+ "energy-full", bif_lastfullcap,
+ "energy-rate", bst_rate,
+ "energy-empty", bif_lowcap,
"voltage", bst_volt,
(void*) NULL);
}
@@ -541,7 +557,6 @@ up_backend_init (UpBackend *backend)
"is-present", TRUE,
"is-rechargeable", TRUE,
"has-history", TRUE,
- "has-statistics", TRUE,
"state", UP_DEVICE_STATE_UNKNOWN,
"percentage", 0.0f,
"time-to-empty", 0,