diff options
Diffstat (limited to 'hardinfo2')
| -rw-r--r-- | hardinfo2/arch/linux/common/battery.h | 56 | ||||
| -rw-r--r-- | hardinfo2/arch/linux/common/uptime.h | 1 | ||||
| -rw-r--r-- | hardinfo2/hardinfo.h | 3 | ||||
| -rw-r--r-- | hardinfo2/util.c | 30 | 
4 files changed, 76 insertions, 14 deletions
| diff --git a/hardinfo2/arch/linux/common/battery.h b/hardinfo2/arch/linux/common/battery.h index 7b47fa90..919dc65d 100644 --- a/hardinfo2/arch/linux/common/battery.h +++ b/hardinfo2/arch/linux/common/battery.h @@ -16,6 +16,8 @@   *    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA   */ +#include <time.h> +  static void  __scan_battery_acpi(void)  { @@ -130,22 +132,52 @@ __scan_battery_acpi(void)  static void  __scan_battery_apm(void)  { -    FILE *procapm; -    int percentage; -    char trash[10]; +    FILE                *procapm; +    static char         *sremaining = NULL, *stotal = NULL; +    static unsigned int  last_time = 0; +    static int           percentage = 0; +    int                  ac_bat; +    float                apm_bios_ver, apm_drv_ver; +    char                 trash[10]; -    procapm = fopen("/proc/apm", "r"); -    if (!procapm) -        return; - -    fscanf(procapm, "%s %s %s %s %s %s %d%%", -           trash, trash, trash, trash, trash, trash, &percentage); -    fclose(procapm); +    if (last_time == 0) { +        last_time = time(NULL); +        sremaining = g_strdup("Estimating"); +        stotal     = g_strdup("Estimating"); +    } +     +    if ((procapm = fopen("/proc/apm", "r"))) { +        int old_percentage = percentage; +         +        fscanf(procapm, "%f %f %s 0x%x %s %s %d%%", +               &apm_drv_ver, &apm_bios_ver, trash, +               &ac_bat, trash, trash, &percentage); +        fclose(procapm); +         +        if (old_percentage - percentage > 0) { +            g_free(sremaining); +            g_free(stotal); +                         +            int secs_remaining = (time(NULL) - last_time) * percentage / +                                 (old_percentage - percentage); +            sremaining = seconds_to_string(secs_remaining); +            stotal = seconds_to_string((secs_remaining * 100) / percentage); +             +            last_time = time(NULL); +        } +    }      battery_list = g_strdup_printf("%s\n[Battery (APM)]\n" -                                   "Charge=%d%%\n", +                                   "Charge=%d%%\n" +                                   "Remaining Charge=%s of %s\n" +                                   "Using=%s\n" +                                   "APM driver version=%.2f\n" +                                   "APM BIOS version=%.2f\n",                                     battery_list, -                                   percentage); +                                   percentage, +                                   sremaining, stotal, +                                   ac_bat ? "AC Power" : "Battery", +                                   apm_drv_ver, apm_bios_ver);  }  static void diff --git a/hardinfo2/arch/linux/common/uptime.h b/hardinfo2/arch/linux/common/uptime.h index cf339bf3..9225c85c 100644 --- a/hardinfo2/arch/linux/common/uptime.h +++ b/hardinfo2/arch/linux/common/uptime.h @@ -50,7 +50,6 @@ computer_get_formatted_uptime()      /* FIXME: Use ngettext */  #define plural(x) ((x > 1) ? "s" : "") -      if (ui->days < 1) {  	if (ui->hours < 1) {  	    tmp = diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index e05521d3..97d3aeea 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -87,7 +87,8 @@ void          nonblock_sleep(guint msec);  void          open_url(gchar *url);  GSList	     *modules_load_selected(void);  GSList       *modules_load_all(void); -ModuleAbout *module_get_about(ShellModule *module); +ModuleAbout  *module_get_about(ShellModule *module); +gchar        *seconds_to_string(unsigned int seconds);  void	      module_entry_scan_all_except(ModuleEntry *entries, gint except_entry);  void	      module_entry_scan_all(ModuleEntry *entries); diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 288dda6c..265ebd3a 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -33,6 +33,36 @@  #define MiB 1048576  #define GiB 1073741824 +gchar *seconds_to_string(unsigned int seconds) +{ +    unsigned int hours, minutes, days; + +    minutes  = seconds / 60; +    hours    = minutes / 60; +    minutes %= 60; +    days     = hours / 24; +    hours   %= 24; + +#define plural(x) ((x > 1) ? "s" : "") +             +    if (days < 1) { +        if (hours < 1) { +            return g_strdup_printf("%d minute%s", minutes, +                                         plural(minutes)); +        } else { +            return g_strdup_printf("%d hour%s, %d minute%s", +                                    hours, +                                    plural(hours), minutes, +                                    plural(minutes)); +        } +    } +     +    return g_strdup_printf("%d day%s, %d hour%s and %d minute%s", +                           days, plural(days), hours, +                           plural(hours), minutes, +                           plural(minutes)); +} +  inline gchar *size_human_readable(gfloat size)  {      if (size < KiB) | 
