chiark / gitweb /
wip new acpi found
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 3 Jun 2012 13:36:35 +0000 (14:36 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 3 Jun 2012 13:36:35 +0000 (14:36 +0100)
cprogs/xacpi-simple.c

index 180df33..20655ac 100644 (file)
@@ -80,19 +80,21 @@ static void badusage(void) { fail("bad usage"); }
 typedef struct batinfo_field {
   const char *file;
   const char *label;
+  const char *acpi_label;
+  double acpi_conversion_factor;
   unsigned long *valuep;
   const char *unit;
   const char *enumarray[10];
 } batinfo_field;
 
-#define QUANTITY_FIELDS                                \
-  QF(info,  design_capacity,    "mWh")         \
-  QF(info,  last_full_capacity, "mWh")         \
-  QF(state, present_rate,       "mW")          \
-  QF(state, remaining_capacity, "mWh")         \
-  QF(alarm, alarm,              "mWh")
+#define QUANTITY_FIELDS                                                        \
+  QF(info,  design_capacity,    "mWh", energy_full_design, 1e-3)       \
+  QF(info,  last_full_capacity, "mWh", energy_full,        1e-3)       \
+  QF(state, present_rate,       "mW",  power_now,          1e-3)       \
+  QF(state, remaining_capacity, "mWh", energy_now,         1e-3)       \
+  QF(alarm, alarm,              "mWh", alarm,              1e-3)
 
-#define QF(f,l,u) static unsigned long thisbat_##f##_##l;
+#define QF(f,l,u,a,ac) static unsigned long thisbat_##f##_##l;
   QUANTITY_FIELDS
 #undef QF
 
@@ -104,9 +106,9 @@ static unsigned long thisbat_state_present, thisbat_state_charging_state;
 static const batinfo_field fields[]= {
 #define E(f,l)       #f, #l, &thisbat_##f##_##l, 0
 #define QF(f,l,u)  { #f, #l, &thisbat_##f##_##l, u },
-  { E(alarm, present),           { "no", "yes" }                          },
-  { E(info, present),            { "no", "yes" }                          },
-  { E(state,present),            { "no", "yes" }                          },
+  { E(alarm, present), 0,0,      { "no", "yes" }                          },
+  { E(info, present),  0,0,      { "no", "yes" }                          },
+  { E(state,present),  0,0,      { "no", "yes" }                          },
   { E(state,charging_state),     { "discharging", "charging", "charged" } },
   QUANTITY_FIELDS           /* take care re charging_state values order -  */
   { 0 }                     /* if you must change it, search for CHGST_... */
@@ -230,8 +232,7 @@ static int readbattery(void) { /* 0=>ok, -1=>couldn't */
   }
 
   if (!(thisbat_alarm_present==0 ||
-       thisbat_info_present==0 ||
-       thisbat_state_present==0)) {
+       thisbat_state_present==0 || thisbat_info_present==0)) {
     if (thisbat_alarm_present == VAL_NOTFOUND)
       thisbat_alarm_present= 1;