Index: battery.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/battery.c,v retrieving revision 1.19 diff -u -r1.19 battery.c --- battery.c 23 Aug 2004 16:43:27 -0000 1.19 +++ battery.c 29 Sep 2004 16:14:49 -0000 @@ -45,6 +45,7 @@ #define TS_DEV "/dev/touchscreen/0raw" #define PROC_BATTERY "/proc/asic/battery" #define PROC_APM "/proc/apm" +#define PROC_BATTERY_GENERIC "/proc/driver/battery" /* local types and structs */ @@ -74,6 +75,7 @@ static int TSfd; FILE *file_apm = NULL; +gboolean have_generic = FALSE; /* local functions */ @@ -81,15 +83,19 @@ void init_device() { /* check if there is an iPaq touchscreen device, open it */ - TSfd=open(TS_DEV, O_RDWR); + TSfd = open(TS_DEV, O_RDWR); if (TSfd < 0) { g_print(_("could not open touchscreen device '%s'\n"), TS_DEV); perror("open"); }; - /* then check if we have apm support available*/ - if (!access(PROC_APM,R_OK)) - file_apm = fopen(PROC_APM,"r"); + /* then check if we have apm support available */ + if (!access(PROC_APM, R_OK)) + file_apm = fopen(PROC_APM, "r"); + + /* then check if we have generic battery */ + if (!access(PROC_BATTERY_GENERIC, R_OK)) + have_generic = TRUE; } @@ -249,6 +255,65 @@ return TRUE; } #endif + + if (!have_generic) + { + /* apm knows only about one battery */ + gtk_widget_hide(batt_ext.bar); + gtk_widget_hide(batt_ext.label); + gtk_widget_hide(batt_ext.lstate); + gtk_widget_hide(batt_ext.lchem); + gtk_widget_hide(batt_ext.lvoltage); + gtk_widget_hide(batt_ext.llifetime); + } + else + { + int percent = 0; + int remaining = 0; + int status; + int barstate = 0; + + /* read data from proc entry */ + + parse_file(PROC_BATTERY_GENERIC, " Backup Battery Capacity %%: %d", &percent); + parse_file(PROC_BATTERY_GENERIC, " Backup Battery mV: %d", &remaining); + + if (percent > 30) + status = 0x00; + else if (percent > 15) + status = 0x01; + else + status = 0x02; + + switch (status) + { + case 0x00: + sprintf(tmp, "%s", _("Status: high")); + barstate = 0; + break; + case 0x01: + sprintf(tmp, "%s", _("Status: low")); + barstate = 85; + break; + case 0x02: + sprintf(tmp, "%s", _("Status: critical")); + barstate = 99; + break; + } + + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (batt_ext.bar), + (float)percent/100.0); + toolbar_set_style(batt_ext.bar, barstate); + sprintf(percstr, "%d %%", percent); + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(batt_ext.bar), percstr); + + gtk_label_set_text(GTK_LABEL(batt_ext.lstate), tmp); + + sprintf(tmp, "%s: %d mV.",_("Voltage"), remaining); + gtk_label_set_text(GTK_LABEL(batt_ext.llifetime), tmp); + } + + if (file_apm) { int percent; @@ -259,14 +324,6 @@ char unit[5]; int barstate = 0; - /* apm knows only about one battery */ - gtk_widget_hide(batt_ext.bar); - gtk_widget_hide(batt_ext.label); - gtk_widget_hide(batt_ext.lstate); - gtk_widget_hide(batt_ext.lchem); - gtk_widget_hide(batt_ext.lvoltage); - gtk_widget_hide(batt_ext.llifetime); - /* read data from proc entry */ fclose(file_apm); file_apm = fopen(PROC_APM,"r"); @@ -335,7 +392,7 @@ gtk_label_set_text(GTK_LABEL(batt_int.llifetime),tmp); } } - else /* nothing we know available: hide widgets */ + else if (!have_generic) /* nothing we know available: hide widgets */ { gtk_widget_hide(batt_ext.bar); gtk_widget_hide(batt_ext.label); @@ -388,13 +445,24 @@ for (i=0;i<2;i++) { if (i==0) - fstr = g_strdup_printf ("%s%s %s", - "", - _("Internal battery"), ""); + if (have_generic) + fstr = g_strdup_printf ("%s%s %s", + "", + _("Main battery"), ""); + else + fstr = g_strdup_printf ("%s%s %s", + "", + _("Internal battery"), ""); else - fstr = g_strdup_printf ("%s%s %s", - "", - _("Jacket battery"), ""); + if (have_generic) + fstr = g_strdup_printf("%s%s %s", + "", + _("Backup battery"), ""); + else + fstr = g_strdup_printf("%s%s %s", + "", + _("Jacket battery"), ""); + label1 = gtk_label_new (NULL); batt.label = label1; gtk_label_set_markup (GTK_LABEL (label1), fstr); @@ -439,12 +507,15 @@ gtk_widget_show_all(sw); /* they will be activated if necessary */ - gtk_widget_hide(batt_ext.bar); - gtk_widget_hide(batt_ext.label); - gtk_widget_hide(batt_ext.lstate); - gtk_widget_hide(batt_ext.lchem); - gtk_widget_hide(batt_ext.lvoltage); - gtk_widget_hide(batt_ext.llifetime); + if (!have_generic) + { + gtk_widget_hide(batt_ext.bar); + gtk_widget_hide(batt_ext.label); + gtk_widget_hide(batt_ext.lstate); + gtk_widget_hide(batt_ext.lchem); + gtk_widget_hide(batt_ext.lvoltage); + gtk_widget_hide(batt_ext.llifetime); + } update_bat_values(NULL);