summaryrefslogtreecommitdiff
path: root/src/openbsd
diff options
context:
space:
mode:
authorLandry Breuil <landry@rhaalovely.net>2011-03-07 21:34:32 +0100
committerRichard Hughes <richard@hughsie.com>2011-03-21 18:40:16 +0000
commit53ba669490af094b9ce9a1ab5d861f7e3f399fb9 (patch)
tree9bfe7ac0b8aff5f45771fd34038c03910bb63e73 /src/openbsd
parent6dd2e35d6fef2f7808a163c30e0855995b7e4ac7 (diff)
downloadupower-53ba669490af094b9ce9a1ab5d861f7e3f399fb9.tar.gz
openbsd: wip on acpibat_state, need to sort wh/ah units
Signed-off-by: Richard Hughes <richard@hughsie.com>
Diffstat (limited to 'src/openbsd')
-rw-r--r--src/openbsd/up-backend.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/openbsd/up-backend.c b/src/openbsd/up-backend.c
index c2411e9..4605674 100644
--- a/src/openbsd/up-backend.c
+++ b/src/openbsd/up-backend.c
@@ -4,6 +4,7 @@
#include "up-daemon.h"
#include "up-marshal.h"
#include "up-device.h"
+#include <string.h> /* strcmp() */
#define UP_BACKEND_SUSPEND_COMMAND "/usr/sbin/zzz"
@@ -303,6 +304,7 @@ up_backend_update_acpibat_state(UpDevice* device, struct sensordev s)
{
enum sensor_type type;
int numt;
+ gdouble bst_volt, bif_dvolt, bst_rate, bif_lastfullcap, bst_cap, bif_dcap, bif_lowcap, capacity;
struct sensor sens;
size_t slen = sizeof(sens);
int mib[] = {CTL_HW, HW_SENSORS, 0, 0, 0};
@@ -315,10 +317,32 @@ up_backend_update_acpibat_state(UpDevice* device, struct sensordev s)
if (sysctl(mib, 5, &sens, &slen, NULL, 0) < 0)
g_error("failed to get sensor type %d(%s) numt %d on %s", type, sensor_type_s[type], numt, s.xname);
else if (slen > 0 && (sens.flags & SENSOR_FINVALID) == 0) {
- /* XX do something with sens.desc/sens.type/sens.value */
+ 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"))
+ bif_lastfullcap = sens.value / 1000000.0f;
+ if (sens.type == SENSOR_AMPHOUR && !strcmp(sens.desc, "low capacity"))
+ bif_lowcap = sens.value / 1000000.0f;
+ if (sens.type == SENSOR_AMPHOUR && !strcmp(sens.desc, "remaining capacity"))
+ bst_cap = sens.value / 1000000.0f;
+ if (sens.type == SENSOR_INTEGER && !strcmp(sens.desc, "rate"))
+ bst_rate = sens.value / 1.0f;
+ /*
+ bif_dvolt = "voltage" = unused ?
+ capacity = lastfull/dcap * 100 ?
+ amphour1 = warning capacity ?
+ raw0 = battery state
+ */
}
}
}
+ 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,
+ "voltage", bst_volt,
+ (void*) NULL);
}
/* callback updating the device */