--- mb-applet-powerctrl/mb-applet-powerctrl.c 2007-07-09 04:53:08.000000000 +0000 +++ mb-applet-powerctrl-new.c 2007-07-10 14:31:44.000000000 +0000 @@ -1436,6 +1436,7 @@ int read_apm() { + FILE *f; apm_info info; apm_read(&info); /* @@ -1446,6 +1447,44 @@ g_apm_vals[TIME_LEFT] = info.battery_time; g_apm_vals[PERCENTAGE] = info.battery_percentage; g_apm_vals[AC_POWER] = info.ac_line_status; + + // grab the battery voltage + // sharpsl_main_battery_voltage measurement is volts*51 + f = fopen("/proc/driver/battery/sharpsl_main_battery_voltage","r"); + if (f != NULL) + { + char rawvoltage[10] = {0}; + if(fgets(rawvoltage, sizeof(rawvoltage), f) != NULL) + { + long voltage = strtol(rawvoltage, NULL, 0); + if (g_apm_vals[AC_POWER] == AC_LINE_STATUS_ON) + { + // quick sanity check on voltage + // ~190 min/~221 max on AC + if (voltage > 0 && voltage < 250) + { + // simple linear approximation: + // 100% defined at 221, 5% defined at 191 + g_apm_vals[PERCENTAGE] = (voltage*95 - 17995) / 30; + } + } + else + { + // just use apm's percentage + // ~143 min/~212 max on battery + } + } + else + { + DBG("Unable to read from /proc/driver/battery/sharpsl_main_battery_voltage\n"); + } + + fclose(f); + } + else + { + DBG("Failed to open /proc/driver/battery/sharpsl_main_battery_voltage\n"); + } return 1; }