Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/battery Modified Files: Makefile.am e_mod_main.c e_mod_main.h Added Files: batget.c Log Message: move battery fetching/polling of info to its own sub process, pipe of stdout to read like tempget. this means e cant hang hen polling - much better for the mainloop. also clean up the code a lot. all battery specific "driver" code is now in batget - this means it much nicer to later add hal battery info fetching as that is also a remote service (and just not execute batget). i also fixed up (in theory) the new 2.6.24+ /sys/class/power_supply parsing to i think work better in more situations. i'm testing on a device i have that does it - let me know if its wrong... =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/battery/Makefile.am,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- Makefile.am 24 Mar 2007 09:23:09 -0000 1.13 +++ Makefile.am 3 Mar 2008 09:48:37 -0000 1.14 @@ -26,5 +26,18 @@ module_la_LDFLAGS = -module -avoid-version module_la_DEPENDENCIES = $(top_builddir)/config.h +batgetdir = $(pkgdir) +batget_DATA = \ +batget$(EXEEXT) + +x_mode = a=rx,u+x +install-data-hook: + @chmod $(x_mode) $(DESTDIR)$(batgetdir)/batget$(EXEEXT) || true + +noinst_PROGRAMS = batget +batget_SOURCES = batget.c +batget_LDFLAGS = @BATTERY_LIBS@ + + uninstall: rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE) =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/battery/e_mod_main.c,v retrieving revision 1.105 retrieving revision 1.106 diff -u -3 -r1.105 -r1.106 --- e_mod_main.c 26 Feb 2008 09:47:51 -0000 1.105 +++ e_mod_main.c 3 Mar 2008 09:48:37 -0000 1.106 @@ -4,25 +4,6 @@ #include "e.h" #include "e_mod_main.h" -#ifdef __FreeBSD__ -# include <sys/types.h> -# include <sys/sysctl.h> -# include <fcntl.h> -# ifdef __i386__ -# include <machine/apm_bios.h> -# endif -# include <stdio.h> -#endif -#ifdef HAVE_CFBASE_H -#include <CFBase.h> -#include <CFNumber.h> -#include <CFArray.h> -#include <CFDictionary.h> -#include <CFRunLoop.h> -#include <ps/IOPSKeys.h> -#include <ps/IOPowerSources.h> -#endif - /***************************************************************************/ /**/ /* gadcon requirements */ @@ -57,23 +38,11 @@ Evas_Object *o_battery; }; +static int _battery_cb_exe_data(void *data, int type, void *event); +static int _battery_cb_exe_del(void *data, int type, void *event); static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_cb_post(void *data, E_Menu *m); -static Status *_battery_linux_acpi_check(void); -static Status *_battery_linux_apm_check(void); -static Status *_battery_linux_powerbook_check(void); -static Status *_battery_linux_sys_acpi_check(void); -#ifdef __FreeBSD__ -static Status *_battery_bsd_acpi_check(void); -static Status *_battery_bsd_apm_check(void); -#endif -#ifdef HAVE_CFBASE_H -static Status *_battery_darwin_check(void); -#endif static void _battery_face_level_set(Instance *inst, double level); -static int _battery_int_get(char *buf); -static char *_battery_string_get(char *buf); -static int _battery_cb_check(void *data); static void _battery_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi); static E_Config_DD *conf_edd = NULL; @@ -102,12 +71,6 @@ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _button_cb_mouse_down, inst); battery_config->instances = evas_list_append(battery_config->instances, inst); - battery_config->battery_check_mode = CHECK_NONE; - battery_config->battery_prev_level = -1; - battery_config->battery_prev_drain = 1; - battery_config->battery_prev_ac = -1; - battery_config->battery_prev_battery = -1; - _battery_cb_check(NULL); return gcc; } @@ -206,1402 +169,6 @@ battery_config->menu = NULL; } -static int -_battery_cb_check(void *data) -{ - Status *ret = NULL; - Evas_List *l; -#ifdef __FreeBSD__ - int acline; - size_t len; - int apm_fd = -1; - int acline_mib[3] = {-1}; -#endif - -#ifdef __FreeBSD__ - if (battery_config->battery_check_mode == 0) - { - len = sizeof(acline); - if (sysctlbyname("hw.acpi.acline", &acline, &len, NULL, 0) == 0) - { - len = 3; - if (sysctlnametomib("hw.acpi.acline", acline_mib, &len) == 0) - battery_config->battery_check_mode = CHECK_ACPI; - } - else - { - apm_fd = open("/dev/apm", O_RDONLY); - if (apm_fd != -1) - battery_config->battery_check_mode = CHECK_APM; - } - } - switch (battery_config->battery_check_mode) - { - case CHECK_ACPI: - ret = _battery_bsd_acpi_check(); - break; - case CHECK_APM: - ret = _battery_bsd_apm_check(); - break; - default: - break; - } -#elif defined(HAVE_CFBASE_H) /* OS X */ - ret = _battery_darwin_check(); -#else - if (battery_config->battery_check_mode == 0) - { - if (ecore_file_is_dir("/sys/class/power_supply")) /* >= 2.6.24 */ - battery_config->battery_check_mode = CHECK_SYS_ACPI; - else if (ecore_file_is_dir("/proc/acpi")) /* <= 2.6.24 */ - battery_config->battery_check_mode = CHECK_ACPI; - else if (ecore_file_exists("/proc/apm")) - battery_config->battery_check_mode = CHECK_APM; - else if (ecore_file_is_dir("/proc/pmu")) - battery_config->battery_check_mode = CHECK_PMU; - } - switch (battery_config->battery_check_mode) - { - case CHECK_ACPI: - ret = _battery_linux_acpi_check(); - break; - case CHECK_APM: - ret = _battery_linux_apm_check(); - break; - case CHECK_PMU: - ret = _battery_linux_powerbook_check(); - break; - case CHECK_SYS_ACPI: - ret = _battery_linux_sys_acpi_check(); - break; - default: - break; - } -#endif - for (l = battery_config->instances; l; l = l->next) - { - Instance *inst; - - inst = l->data; - if (ret) - { - if (ret->has_battery) - { - if (ret->state == BATTERY_STATE_CHARGING) - { - if (battery_config->battery_prev_ac != 1) - edje_object_signal_emit(inst->o_battery, "e,state,charging", "e"); - edje_object_signal_emit(inst->o_battery, "e,action,pulse,stop", "e"); - edje_object_part_text_set(inst->o_battery, "e.text.reading", ret->reading); - edje_object_part_text_set(inst->o_battery, "e.text.time", ret->time); - _battery_face_level_set(inst, ret->level); - battery_config->battery_prev_ac = 1; - } - else if (ret->state == BATTERY_STATE_DISCHARGING) - { - if (battery_config->battery_prev_ac != 0) - edje_object_signal_emit(inst->o_battery, "e,state,discharging", "e"); - if (ret->alarm) - { - if (!battery_config->alarm_triggered) - { - E_Dialog *dia; - - dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_e_mod_battery_low_dialog"); - if (!dia) return 0; - e_dialog_title_set(dia, "Enlightenment Battery Module"); - e_dialog_icon_set(dia, "enlightenment/e", 64); - e_dialog_text_set(dia, - _("Battery Running Low<br>" - "Your battery is running low.<br>" - "You may wish to switch to an AC source.")); - e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL); - e_win_centered_set(dia->win, 1); - e_dialog_show(dia); - edje_object_signal_emit(inst->o_battery, "e,action,pulse,start", "e"); - } - } - edje_object_part_text_set(inst->o_battery, "e.text.reading", ret->reading); - edje_object_part_text_set(inst->o_battery, "e.text.time", ret->time); - _battery_face_level_set(inst, ret->level); - battery_config->battery_prev_ac = 0; - if (ret->alarm) - battery_config->alarm_triggered = 1; - } - else - { - /* ret->state == BATTERY_STATE_NONE */ - if (battery_config->battery_prev_ac != 1) - edje_object_signal_emit(inst->o_battery, "e,state,charging", "e"); - if (battery_config->battery_prev_battery == 0) - edje_object_signal_emit(inst->o_battery, "e,state,charging", "e"); - edje_object_part_text_set(inst->o_battery, "e.text.reading", ret->reading); - edje_object_part_text_set(inst->o_battery, "e.text.time", ret->time); - _battery_face_level_set(inst, ret->level); - battery_config->battery_prev_ac = 1; - battery_config->battery_prev_battery = 1; - } - } - else - { - /* Hasn't battery */ - if (battery_config->battery_prev_battery != 0) - edje_object_signal_emit(inst->o_battery, "e,state,unknown", "e"); - edje_object_part_text_set(inst->o_battery, "e.text.reading", ret->reading); - edje_object_part_text_set(inst->o_battery, "e.text.time", ret->time); - _battery_face_level_set(inst, ret->level); - battery_config->battery_prev_battery = 0; - } - } - else - { - /* Error reading status */ - if (battery_config->battery_prev_battery != -2) - edje_object_signal_emit(inst->o_battery, "e,state,unknown", "e"); - edje_object_part_text_set(inst->o_battery, "e.text.reading", _("ERROR")); - edje_object_part_text_set(inst->o_battery, "e.text.time", "--:--"); - _battery_face_level_set(inst, (double)(rand() & 0xff) / 255.0); - battery_config->battery_prev_battery = -2; - battery_config->battery_check_mode = CHECK_NONE; - } - } - if (ret) - { - free(ret->reading); - free(ret->time); - free(ret); - } - return 1; -} - -static Status * -_battery_linux_sys_acpi_check(void) -{ - Ecore_List *bats; - char buf[4096], buf2[4096]; - char *name; - int bat_max = 0; - int bat_filled = 0; - int bat_level = 0; - int bat_drain = 1; - int bat_val = 0; - int discharging = 0; - int charging = 0; - int battery = 0; - int design_cap_unknown = 0; - int last_full_unknown = 0; - int rate_unknown = 0; - int level_unknown = 0; - int hours, minutes; - Status *stat; - static double last_poll_time = 0.0; - double poll_time, t; - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - t = ecore_time_get(); - poll_time = t - last_poll_time; - last_poll_time = t; - - /* Read some information on first run. */ - bats = ecore_file_ls("/sys/class/power_supply/"); - if (bats) - { - while ((name = ecore_list_next(bats))) - { - FILE *f; - int design_cap = 0; - int last_full = 0; - int present = 0; - char *charging_state = NULL; - int rate = 1; - int level = 0; - - if (name && strncasecmp("BAT", name, 3)) continue; - - /* present */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/present", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - present = atoi(buf2); - - fclose(f); - } - - /* design capacity */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/charge_full_design", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - design_cap = atoi(buf2); - - if(!design_cap) design_cap_unknown++; - - fclose(f); - } - - /* last full capacity */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/charge_full", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - last_full = atoi(buf2); - - if(!last_full) last_full_unknown++; - - fclose(f); - } - - /* charging state */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/status", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - charging_state = strdup(buf2); - - fclose(f); - } - - /* present rate */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/current_now", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - rate = atoi(buf2); - - fclose(f); - } - - /* remaining capacity */ - snprintf(buf, sizeof(buf), "/sys/class/power_supply/%s/charge_now", name); - f = fopen(buf, "r"); - if (f) - { - fgets(buf2, sizeof(buf2), f); - level = atoi(buf2); - - if(!level) level_unknown++; - - fclose(f); - } - - if (present) battery++; - - if (charging_state) - { - if (!strncmp(charging_state, "Discharging", strlen("Discharging"))) - { - discharging++; - if ((rate == 0) && (rate_unknown == 0)) rate_unknown++; - } - else if (!strncmp(charging_state, "Charging", strlen("Charging"))) - { - charging++; - if ((rate == 0) && (rate_unknown == 0)) rate_unknown++; - } - else if (!strncmp(charging_state, "Full", strlen("Full"))) - { - rate_unknown--; - } - free(charging_state); - } - - bat_drain += rate; - bat_level += level; - bat_max += design_cap; - bat_filled += last_full; - } - ecore_list_destroy(bats); - } - - - - if ((rate_unknown) && (bat_level != battery_config->battery_prev_level) && - (battery_config->battery_prev_level >= 0) && (poll_time > 0.0)) - { - bat_drain = - ((bat_level - battery_config->battery_prev_level) * 60 * 60) / - poll_time; - if (bat_drain < 0) bat_drain = -bat_drain; - if (bat_drain == 0) bat_drain = 1; - rate_unknown = 0; - } - else - { - if (battery_config->battery_prev_drain < 1) - battery_config->battery_prev_drain = 1; - if (bat_drain < 1) - bat_drain = battery_config->battery_prev_drain; - battery_config->battery_prev_drain = bat_drain; - } - - if (bat_filled > 0) bat_val = (100 * bat_level) / bat_filled; - else bat_val = 100; - - battery_config->battery_prev_level = bat_level; - - if (discharging) minutes = (60 * bat_level) / bat_drain; - else - { - /* FIXME: Batteries charge in paralell! */ - if (bat_filled > 0) - minutes = (60 * (bat_filled - bat_level)) / bat_drain; - else - minutes = 0; - } - hours = minutes / 60; - minutes -= (hours * 60); - - if (hours < 0) hours = 0; - if (minutes < 0) minutes = 0; - - if (!battery) - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("N/A")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - else if ((charging) || (discharging)) - { - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - if (charging) - { - stat->state = BATTERY_STATE_CHARGING; - battery_config->alarm_triggered = 0; - } - else if (discharging) - { - stat->state = BATTERY_STATE_DISCHARGING; - if (stat->level < 0.1) - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (bat_val <= battery_config->alarm_p) - stat->alarm = 1; - } - } - - if (level_unknown) - { - stat->reading = strdup(_("BAD DRIVER")); - stat->time = strdup("--:--"); - stat->level = 0.0; - } - else if (rate_unknown) - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - stat->time = strdup("--:--"); - stat->level = (double)bat_val / 100.0; - } - else - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - stat->level = (double)bat_val / 100.0; - } - } - else - { - stat->has_battery = 1; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("FULL")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - - return stat; -} - -static Status * -_battery_linux_acpi_check(void) -{ - Ecore_List *bats; - char buf[4096], buf2[4096]; - char *name; - int bat_max = 0; - int bat_filled = 0; - int bat_level = 0; - int bat_drain = 1; - int bat_val = 0; - int discharging = 0; - int charging = 0; - int battery = 0; - int design_cap_unknown = 0; - int last_full_unknown = 0; - int rate_unknown = 0; - int level_unknown = 0; - int hours, minutes; - Status *stat; - static double last_poll_time = 0.0; - double poll_time, t; - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - t = ecore_time_get(); - poll_time = t - last_poll_time; - last_poll_time = t; - - /* Read some information on first run. */ - bats = ecore_file_ls("/proc/acpi/battery"); - if (bats) - { - while ((name = ecore_list_next(bats))) - { - FILE *f; - char *tmp; - int design_cap; - int last_full; - - snprintf(buf, sizeof(buf), "/proc/acpi/battery/%s/info", name); - f = fopen(buf, "r"); - if (f) - { - design_cap = 0; - last_full = 0; - /* present */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - /* design capacity */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_string_get(buf2); - if (tmp) - { - if (!strcmp(tmp, "unknown")) design_cap_unknown = 1; - else design_cap = atoi(tmp); - free(tmp); - } - /* last full capacity */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_string_get(buf2); - if (tmp) - { - if (!strcmp(tmp, "unknown")) last_full_unknown = 1; - else last_full = atoi(tmp); - free(tmp); - } - fclose(f); - } - snprintf(buf, sizeof(buf), "/proc/acpi/battery/%s/state", name); - f = fopen(buf, "r"); - if (f) - { - char *present; - char *capacity_state; - char *charging_state; - char *tmp; - int rate = 1; - int level = 0; - - /* present */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - present = _battery_string_get(buf2); - /* capacity state */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - capacity_state = _battery_string_get(buf2); - /* charging state */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - charging_state = _battery_string_get(buf2); - /* present rate */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_string_get(buf2); - if (tmp) - { - if (!strcmp(tmp, "unknown")) rate_unknown++; - else rate = atoi(tmp); - free(tmp); - } - /* remaining capacity */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_string_get(buf2); - if (tmp) - { - if (!strcmp(tmp, "unknown")) level_unknown++; - else level = atoi(tmp); - free(tmp); - } - fclose(f); - if (present) - { - if (!strcmp(present, "yes")) battery++; - free(present); - } - if (charging_state) - { - if (!strcmp(charging_state, "discharging")) - { - discharging++; - if ((rate == 0) && (rate_unknown == 0)) rate_unknown++; - } - else if (!strcmp(charging_state, "charging")) - { - charging++; - if ((rate == 0) && (rate_unknown == 0)) rate_unknown++; - } - else if (!strcmp(charging_state, "charged")) - { - rate_unknown--; - } - free(charging_state); - } - E_FREE(capacity_state); - - bat_drain += rate; - bat_level += level; - } - bat_max += design_cap; - bat_filled += last_full; - } - ecore_list_destroy(bats); - } - - if ((rate_unknown) && (bat_level != battery_config->battery_prev_level) && - (battery_config->battery_prev_level >= 0) && (poll_time > 0.0)) - { - bat_drain = - ((bat_level - battery_config->battery_prev_level) * 60 * 60) / - poll_time; - if (bat_drain < 0) bat_drain = -bat_drain; - if (bat_drain == 0) bat_drain = 1; - rate_unknown = 0; - } - else - { - if (battery_config->battery_prev_drain < 1) - battery_config->battery_prev_drain = 1; - if (bat_drain < 1) - bat_drain = battery_config->battery_prev_drain; - battery_config->battery_prev_drain = bat_drain; - } - - if (bat_filled > 0) bat_val = (100 * bat_level) / bat_filled; - else bat_val = 100; - - battery_config->battery_prev_level = bat_level; - - if (discharging) minutes = (60 * bat_level) / bat_drain; - else - { - /* FIXME: Batteries charge in paralell! */ - if (bat_filled > 0) - minutes = (60 * (bat_filled - bat_level)) / bat_drain; - else - minutes = 0; - } - hours = minutes / 60; - minutes -= (hours * 60); - - if (hours < 0) hours = 0; - if (minutes < 0) minutes = 0; - - if (!battery) - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("N/A")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - else if ((charging) || (discharging)) - { - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - if (charging) - { - stat->state = BATTERY_STATE_CHARGING; - battery_config->alarm_triggered = 0; - } - else if (discharging) - { - stat->state = BATTERY_STATE_DISCHARGING; - if (stat->level < 0.1) - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (bat_val <= battery_config->alarm_p) - stat->alarm = 1; - } - } - if (level_unknown) - { - stat->reading = strdup(_("BAD DRIVER")); - stat->time = strdup("--:--"); - stat->level = 0.0; - } - else if (rate_unknown) - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - stat->time = strdup("--:--"); - stat->level = (double)bat_val / 100.0; - } - else - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - stat->level = (double)bat_val / 100.0; - } - } - else - { - stat->has_battery = 1; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("FULL")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - return stat; -} - -static Status * -_battery_linux_apm_check(void) -{ - FILE *f; - char s[256], s1[32], s2[32], s3[32], buf[4096]; - int apm_flags, ac_stat, bat_stat, bat_flags, bat_val, time_val; - int hours, minutes; - - Status *stat; - - f = fopen("/proc/apm", "r"); - if (!f) return NULL; - - fgets(s, sizeof(s), f); s[sizeof(s) - 1] = 0; - if (sscanf(s, "%*s %*s %x %x %x %x %s %s %s", - &apm_flags, &ac_stat, &bat_stat, &bat_flags, s1, s2, s3) != 7) - { - fclose(f); - return NULL; - } - s1[strlen(s1) - 1] = 0; - bat_val = atoi(s1); - if (!strcmp(s3, "sec")) time_val = atoi(s2); - else if (!strcmp(s3, "min")) time_val = atoi(s2) * 60; - fclose(f); - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - if ((bat_flags != 0xff) && (bat_flags & 0x80)) - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup("N/A"); - stat->time = strdup("--:--"); - stat->level = 1.0; - return stat; - } - - - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - if (bat_val >= 0) - { - if (bat_val > 100) bat_val = 100; - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - stat->level = (double)bat_val / 100.0; - } - else - { - switch (bat_stat) - { - case 0: - stat->reading = strdup(_("High")); - stat->level = 1.0; - break; - case 1: - stat->reading = strdup(_("Low")); - stat->level = 0.5; - break; - case 2: - stat->reading = strdup(_("Danger")); - stat->level = 0.25; - break; - case 3: - stat->reading = strdup(_("Charging")); - stat->level = 1.0; - break; - } - } - - if (ac_stat == 1) - { - stat->state = BATTERY_STATE_CHARGING; - stat->time = strdup("--:--"); - } - else - { - /* ac_stat == 0 */ - stat->state = BATTERY_STATE_DISCHARGING; - - hours = time_val / 3600; - minutes = (time_val / 60) % 60; - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - if (stat->level < 0.1) - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (bat_val <= battery_config->alarm_p) - stat->alarm = 1; - } - } - - return stat; -} - - -/* hack for pmu */ - -/* This function converts a string to an integer. Additionally to - * atoi() it converts also hexadecimal values - */ -static int -axtoi(char *arg) -{ - int n, val, pwr=1, m, rc = 0; - char hex[9], c; - - for (n = 0, m = 0; n < strlen(arg); n++) - { - if (arg[n] != ' ') - { - hex[m++] = c = toupper(arg[n]); - if ((m == sizeof(hex)) || (c < '0') || (c > 'F')) - return 0; /* overflow or invalid */ - } - } - hex[m] = '\0'; /* terminate string */ - - for (n = 0; n < m; n++) - { - c = hex[m-n-1]; - if ((c >= 'A') && (c <= 'F')) - val = c -'A' + 10; - else - val = c - '0'; - rc = rc + val * pwr; - pwr *= 16; - } - return rc; -} - -static Status * -_battery_linux_powerbook_check(void) -{ - Ecore_List *bats; - char buf[4096], buf2[4096]; - char *name; - char *token; - FILE *f; - int discharging = 0; - int charging = 0; - int battery = 0; - int ac = 0; - int seconds = 0; - int hours, minutes; - int flags; - int voltage; - int charge; - int max_charge; - double tmp; - Status *stat; - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - /* Read some information. */ - f = fopen("/proc/pmu/info", "r"); - if (f) - { - /* Skip driver */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - /* Skip firmware */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - /* Read ac */ - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - ac = _battery_int_get(buf2); - fclose(f); - } - - bats = ecore_file_ls("/proc/pmu"); - if (bats) - { - while ((name = ecore_list_next(bats))) - { - if (strncmp(name, "battery", 7)) - continue; - - snprintf(buf, sizeof(buf), "/proc/pmu/%s", name); - f = fopen(buf, "r"); - if (f) - { - int time = 0; - int current = 0; - - while (fgets (buf,sizeof (buf), f)) - { - if ((token = strtok (buf, ":"))) - { - if (!strncmp ("flags", token, 5)) - flags = axtoi (strtok (0, ": ")); - else if (!strncmp ("charge", token, 6)) - charge = atoi(strtok(0, ": ")); - else if (!strncmp ("max_charge", token, 9)) - max_charge = atoi (strtok(0,": ")); - else if (!strncmp ("current", token, 7)) - current = atoi (strtok(0, ": ")); - else if (!strncmp ("time rem", token, 8)) - time = atoi (strtok(0, ": ")); - else if (!strncmp ("voltage", token, 7)) - voltage = atoi (strtok(0,": ")); - else - strtok (0,": "); - } - } - /* Skip flag; - int tmp = 0; - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_int_get(buf2); - charge += tmp; - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - tmp = _battery_int_get(buf2); - max_charge += tmp; - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - current = _battery_int_get(buf2); - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; - time = _battery_int_get(buf2); - */ - fclose(f); - - battery = 1; - if (!current) - { - /* Neither charging nor discharging */ - } - else if (!ac) - { - /* When on dc, we are discharging */ - discharging = 1; - seconds += time; - } - else - { - /* Charging */ - charging = 1; - /* Charging works in paralell */ - seconds = MAX(time, seconds); - } - - } - } - ecore_list_destroy(bats); - } - hours = seconds / (60 * 60); - seconds -= hours * (60 * 60); - minutes = seconds / 60; - seconds -= minutes * 60; - - if (hours < 0) hours = 0; - if (minutes < 0) minutes = 0; - - - if (!battery) - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("N/A")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - else if ((charging) || (discharging)) - { - stat->has_battery = 1; - stat->level = (double)charge / (double)max_charge; - if (stat->level > 1.0) stat->level = 1.0; - tmp = (double)max_charge / 100; - tmp = (double)charge / tmp; - stat->level = (double)tmp / 100; - - snprintf(buf, sizeof(buf), "%.0f%%", tmp); - stat->reading = strdup(buf); - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - if (charging) - { - stat->state = BATTERY_STATE_CHARGING; - battery_config->alarm_triggered = 0; - } - else if (discharging) - { - stat->state = BATTERY_STATE_DISCHARGING; - if (stat->level < 0.1) - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (stat->level <= battery_config->alarm_p) - stat->alarm = 1; - } - } - } - else - { - stat->has_battery = 1; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("FULL")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - return stat; -} - -#ifdef __FreeBSD__ -static Status * -_battery_bsd_acpi_check(void) -{ - /* Assumes only a single battery - I don't know how multiple batts - * are represented in sysctl */ - - Ecore_List *bats; - char buf[4096], buf2[4096]; - char *name; - - int bat_max = 0; - int bat_filled = 0; - int bat_level = 0; - int bat_drain = 1; - - int bat_val = 0; - - int discharging = 0; - int charging = 0; - int battery = 0; - - int design_cap_unknown = 0; - int last_full_unknown = 0; - int rate_unknown = 0; - int level_unknown = 0; - - int hours, minutes; - - int mib_state[4]; - int mib_life[4]; - int mib_time[4]; - int mib_units[4]; - size_t len; - int state; - int level; - int time; - int life; - int batteries; - - Status *stat; - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - /* Read some information on first run. */ - len = 4; - sysctlnametomib("hw.acpi.battery.state", mib_state, &len); - len = sizeof(state); - if (sysctl(mib_state, 4, &state, &len, NULL, 0) == -1) - /* ERROR */ - state = -1; - - len = 4; - sysctlnametomib("hw.acpi.battery.life", mib_life, &len); - len = sizeof(life); - if (sysctl(mib_life, 4, &life, &len, NULL, 0) == -1) - /* ERROR */ - level = -1; - - bat_val = life; - - len = 4; - sysctlnametomib("hw.acpi.battery.time", mib_time, &len); - len = sizeof(time); - if (sysctl(mib_time, 4, &time, &len, NULL, 0) == -1) - /* ERROR */ - time = -2; - - len = 4; - sysctlnametomib("hw.acpi.battery.units", mib_units, &len); - len = sizeof(batteries); - if (sysctl(mib_time, 4, &batteries, &len, NULL, 0) == -1) - /* ERROR */ - batteries = 1; - - if (battery_config->battery_prev_drain < 1) - battery_config->battery_prev_drain = 1; - - if (bat_drain < 1) - bat_drain = battery_config->battery_prev_drain; - - battery_config->battery_prev_drain = bat_drain; - - /*if (bat_filled > 0) - bat_val = (100 * bat_level) / bat_filled; - else - bat_val = 100; - - if (state == BATTERY_STATE_DISCHARGING) - minutes = (60 * bat_level) / bat_drain; - else - { - if (bat_filled > 0) - minutes = (60 * (bat_filled - bat_level)) / bat_drain; - else - minutes = 0; - }*/ - minutes = time; - hours = minutes / 60; - minutes -= (hours * 60); - - if (hours < 0) - hours = 0; - if (minutes < 0) - minutes = 0; - - if (batteries == 1) /* hw.acpi.battery.units = 1 means NO BATTS */ - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("N/A")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - else if ((state == BATTERY_STATE_CHARGING) || - (state == BATTERY_STATE_DISCHARGING)) - { - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - if (state == BATTERY_STATE_CHARGING) - { - stat->state = BATTERY_STATE_CHARGING; - battery_config->alarm_triggered = 0; - } - else if (state == BATTERY_STATE_DISCHARGING) - { - stat->state = BATTERY_STATE_DISCHARGING; - if (stat->level < 0.1) /* Why this if condition */ - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (bat_val <= battery_config->alarm_p) - stat->alarm = 1; - } - } - if (level == -1) - { - stat->reading = strdup(_("BAD DRIVER")); - stat->time = strdup("--:--"); - stat->level = 0.0; - } - else if (time == -1) - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - stat->time = strdup("--:--"); - stat->level = (double)bat_val / 100.0; - } - else - { - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - stat->level = (double)bat_val / 100.0; - } - } - else - { - stat->has_battery = 1; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup(_("FULL")); - stat->time = strdup("--:--"); - stat->level = 1.0; - } - return stat; -} - -static Status * -_battery_bsd_apm_check(void) -{ -#ifdef __i386__ - int ac_stat, bat_stat, bat_val, time_val; - char buf[4096]; - int hours, minutes; - int apm_fd = -1; - struct apm_info info; - - Status *stat; - - apm_fd = open("/dev/apm", O_RDONLY); - - if (apm_fd != -1 && ioctl(apm_fd, APMIO_GETINFO, &info) != -1) - { - /* set values */ - ac_stat = info.ai_acline; - bat_stat = info.ai_batt_stat; - bat_val = info.ai_batt_life; - time_val = info.ai_batt_time; - } - else - { - return NULL; - } - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - if (info.ai_batteries == 1) /* ai_batteries == 1 means NO battery, - ai_batteries == 2 means 1 battery */ - { - stat->has_battery = 0; - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup("N/A"); - stat->time = strdup("--:--"); - stat->level = 1.0; - return stat; - } - - - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - - if (ac_stat) /* Wallpowered */ - { - stat->state = BATTERY_STATE_CHARGING; - stat->time = strdup("--:--"); - switch (bat_stat) /* On FreeBSD the time_val is -1 when AC ist plugged - in. This means we don't know how long the battery - will recharge */ - { - case 0: - stat->reading = strdup(_("High")); - stat->level = 1.0; - break; - case 1: - stat->reading = strdup(_("Low")); - stat->level = 0.5; - break; - case 2: - stat->reading = strdup(_("Danger")); - stat->level = 0.25; - break; - case 3: - stat->reading = strdup(_("Charging")); - stat->level = 1.0; - break; - } - } - else /* Running on battery */ - { - stat->state = BATTERY_STATE_DISCHARGING; - - snprintf(buf, sizeof(buf), "%i%%", bat_val); - stat->reading = strdup(buf); - stat->level = (double)bat_val / 100.0; - - hours = time_val / 3600; - minutes = (time_val / 60) % 60; - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - - if (stat->level < 0.1) /* Why this if condition? */ - { - if (((hours * 60) + minutes) <= battery_config->alarm) - stat->alarm = 1; - if (bat_val <= battery_config->alarm_p) - stat->alarm = 1; - } - } - - return stat; -#else - return NULL; -#endif -} -#endif - -#ifdef HAVE_CFBASE_H -/* - * There is a good chance this will work with a UPS as well as a battery. - */ -static Status * -_battery_darwin_check(void) -{ - const void *values; - int device_num; - int device_count; - int hours, minutes; - int currentval = 0; - int maxval = 0; - char buf[4096]; - CFTypeRef blob; - CFArrayRef sources; - CFDictionaryRef device_dict; - - Status *stat; - - stat = E_NEW(Status, 1); - if (!stat) return NULL; - - /* - * Retrieve the power source data and the array of sources. - */ - blob = IOPSCopyPowerSourcesInfo(); - sources = IOPSCopyPowerSourcesList(blob); - device_count = CFArrayGetCount(sources); - - for (device_num = 0; device_num < device_count; device_num++) - { - CFTypeRef ps; - - printf("device %d of %d\n", device_num, device_count); - - /* - * Retrieve a dictionary of values for this device and the - * count of keys in the dictionary. - */ - ps = CFArrayGetValueAtIndex(sources, device_num); - device_dict = IOPSGetPowerSourceDescription(blob, ps); - - /* - * Retrieve the charging key and save the present charging value if - * one exists. - */ - if (CFDictionaryGetValueIfPresent(device_dict, CFSTR(kIOPSIsChargingKey), &values)) - { - stat->has_battery = 1; - printf("%s: %d\n", kIOPSIsChargingKey, CFBooleanGetValue(values)); - if (CFBooleanGetValue(values) > 0) - { - stat->state = BATTERY_STATE_CHARGING; - } - else - { - stat->state = BATTERY_STATE_DISCHARGING; - } - /* CFRelease(values); */ - break; - } - - } - - /* - * Check for battery. - */ - if (!stat->has_battery) - { - CFRelease(sources); - CFRelease(blob); - stat->state = BATTERY_STATE_NONE; - stat->reading = strdup("N/A"); - stat->time = strdup("--:--"); - stat->level = 1.0; - return stat; - } - - /* - * A battery was found so move along based on that assumption. - */ - battery_config->battery_prev_battery = 1; - stat->has_battery = 1; - - /* - * Retrieve the current capacity key. - */ - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSCurrentCapacityKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - /* CFRelease(values); */ - - /* - * Retrieve the max capacity key. - */ - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSMaxCapacityKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, &maxval); - /* CFRelease(values); */ - - /* - * Calculate the percentage charged. - */ - stat->level = (double)currentval / (double)maxval; - printf("Battery charge %g\n", stat->level); - - /* - * Retrieve the remaining battery power or time until charged in minutes. - */ - if (stat->state == BATTERY_STATE_DISCHARGING) - { - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSTimeToEmptyKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - /* CFRelease(values); */ - - /* - * Display remaining battery percentage. - */ - snprintf(buf, sizeof(buf), "%i%%", (int)(stat->level * 100)); - stat->reading = strdup(buf); - - hours = currentval / 60; - minutes = currentval % 60; - - /* - * Check if an alarm should be raised. - */ - if (currentval <= battery_config->alarm) - stat->alarm = 1; - if (stat->level <= battery_config->alarm_p) - stat->alarm = 1; - } - else - { - values = CFDictionaryGetValue(device_dict, CFSTR(kIOPSTimeToFullChargeKey)); - CFNumberGetValue(values, kCFNumberSInt32Type, ¤tval); - /* CFRelease(values); */ - - stat->reading = strdup(_("Charging")); - - hours = currentval / 60; - minutes = currentval % 60; - } - - /* - * Store the time remaining. - */ - if (minutes >= 0) - { - snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); - stat->time = strdup(buf); - } - else - stat->time = strdup("--:--"); - - CFRelease(sources); - CFRelease(blob); - - return stat; -} -#endif - static void _battery_face_level_set(Instance *inst, double level) { @@ -1613,36 +180,6 @@ edje_object_message_send(inst->o_battery, EDJE_MESSAGE_FLOAT, 1, &msg); } -static int -_battery_int_get(char *buf) -{ - char *p, *q; - - p = strchr(buf, ':'); - if (!p) return 0; - p++; - while (*p == ' ') p++; - q = p; - while ((*q != ' ') && (*q != '\n')) q++; - if (q) *q = 0; - return atoi(p); -} - -static char * -_battery_string_get(char *buf) -{ - char *p, *q; - - p = strchr(buf, ':'); - if (!p) return NULL; - p++; - while (*p == ' ') p++; - q = p; - while ((*q) && (*q != ' ') && (*q != '\n')) q++; - if (q) *q = 0; - return strdup(p); -} - static void _battery_face_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -1654,12 +191,19 @@ void _battery_config_updated(void) { + char buf[4096]; + if (!battery_config) return; - ecore_poller_del(battery_config->battery_check_poller); - battery_config->battery_check_poller = - ecore_poller_add(ECORE_POLLER_CORE, battery_config->poll_interval, - _battery_cb_check, NULL); - _battery_cb_check(NULL); + ecore_exe_terminate(battery_config->batget_exe); + ecore_exe_free(battery_config->batget_exe); + snprintf(buf, sizeof(buf), + "%s/%s/batget %i", + e_module_dir_get(battery_config->module), MODULE_ARCH, + battery_config->poll_interval); + battery_config->batget_exe = ecore_exe_pipe_run(buf, + ECORE_EXE_PIPE_READ | + ECORE_EXE_PIPE_READ_LINE_BUFFERED, + NULL); } /***************************************************************************/ @@ -1689,23 +233,38 @@ if (!battery_config) { battery_config = E_NEW(Config, 1); - battery_config->poll_interval = 256; + battery_config->poll_interval = 512; battery_config->alarm = 30; battery_config->alarm_p = 10; } - E_CONFIG_LIMIT(battery_config->poll_interval, 1, 1024); + E_CONFIG_LIMIT(battery_config->poll_interval, 4, 4096); E_CONFIG_LIMIT(battery_config->alarm, 0, 60); E_CONFIG_LIMIT(battery_config->alarm_p, 0, 100); - battery_config->battery_check_mode = CHECK_NONE; - battery_config->battery_prev_drain = 1; - battery_config->battery_prev_ac = -1; - battery_config->battery_prev_battery = -1; - battery_config->battery_check_poller = - ecore_poller_add(ECORE_POLLER_CORE, battery_config->poll_interval, - _battery_cb_check, NULL); battery_config->module = m; + battery_config->full = -2; + battery_config->time_left = -2; + battery_config->have_battery = -2; + battery_config->have_power = -2; + + snprintf(buf, sizeof(buf), + "%s/%s/batget %i", + e_module_dir_get(battery_config->module), MODULE_ARCH, + battery_config->poll_interval); + battery_config->batget_exe = ecore_exe_pipe_run(buf, + ECORE_EXE_PIPE_READ | + ECORE_EXE_PIPE_READ_LINE_BUFFERED, + NULL); + battery_config->batget_data_handler = + ecore_event_handler_add(ECORE_EXE_EVENT_DATA, + _battery_cb_exe_data, + NULL); + battery_config->batget_del_handler = + ecore_event_handler_add(ECORE_EXE_EVENT_DEL, + _battery_cb_exe_del, + NULL); + e_gadcon_provider_register(&_gadcon_class); snprintf(buf, sizeof(buf), "%s/e-module-battery.edj", e_module_dir_get(m)); @@ -1723,10 +282,23 @@ e_gadcon_provider_unregister(&_gadcon_class); + ecore_exe_terminate(battery_config->batget_exe); + ecore_exe_free(battery_config->batget_exe); + battery_config->batget_exe = NULL; + + if (battery_config->batget_data_handler) + { + ecore_event_handler_del(battery_config->batget_data_handler); + battery_config->batget_data_handler = NULL; + } + if (battery_config->batget_del_handler) + { + ecore_event_handler_del(battery_config->batget_del_handler); + battery_config->batget_del_handler = NULL; + } + if (battery_config->config_dialog) e_object_del(E_OBJECT(battery_config->config_dialog)); - if (battery_config->battery_check_poller) - ecore_poller_del(battery_config->battery_check_poller); if (battery_config->menu) { e_menu_post_deactivate_callback_set(battery_config->menu, NULL, NULL); @@ -1747,3 +319,104 @@ } /**/ /***************************************************************************/ + +/***************************************************************************/ +/**/ +static int +_battery_cb_exe_data(void *data, int type, void *event) +{ + Ecore_Exe_Event_Data *ev; + + ev = event; + if (ev->exe != battery_config->batget_exe) return 1; + if ((ev->lines) && (ev->lines[0].line)) + { + int i; + + for (i = 0; ev->lines[i].line; i++) + { + if (!strcmp(ev->lines[i].line, "ERROR")) + { + Evas_List *l; + + for (l = battery_config->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + edje_object_signal_emit(inst->o_battery, "e,state,unknown", "e"); + edje_object_part_text_set(inst->o_battery, "e.text.reading", _("ERROR")); + edje_object_part_text_set(inst->o_battery, "e.text.time", _("ERROR")); + } + } + else + { + int full = 0; + int time_left = 0; + int have_battery = 0; + int have_power = 0; + Evas_List *l; + + sscanf(ev->lines[i].line, "%i %i %i %i", + &full, &time_left, &have_battery, &have_power); + for (l = battery_config->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + if (have_power != battery_config->have_power) + { + if (have_power) + edje_object_signal_emit(inst->o_battery, "e,state,charging", "e"); + else + edje_object_signal_emit(inst->o_battery, "e,state,discharging", "e"); + } + if (have_battery) + { + if (battery_config->full != full) + { + char buf[256]; + + snprintf(buf, sizeof(buf), "%i%%", full); + edje_object_part_text_set(inst->o_battery, "e.text.reading", buf); + _battery_face_level_set(inst, (double)full / 100.0); + } + } + else + { + edje_object_part_text_set(inst->o_battery, "e.text.reading", _("N/A")); + _battery_face_level_set(inst, 0.0); + } + if (time_left != battery_config->time_left) + { + char buf[256]; + int mins, hrs; + + hrs = time_left / 3600; + mins = (time_left) / 60 - (hrs * 60); + snprintf(buf, sizeof(buf), "%i:%02i", hrs, mins); + if (hrs < 0) hrs = 0; + if (mins < 0) mins = 0; + edje_object_part_text_set(inst->o_battery, "e.text.time", buf); + } + } + battery_config->full = full; + battery_config->time_left = time_left; + battery_config->have_battery = have_battery; + battery_config->have_power = have_power; + } + } + } + return 0; +} + +static int +_battery_cb_exe_del(void *data, int type, void *event) +{ + Ecore_Exe_Event_Del *ev; + + ev = event; + if (ev->exe != battery_config->batget_exe) return 1; + battery_config->batget_exe = NULL; + return 0; +} =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/battery/e_mod_main.h,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- e_mod_main.h 28 Jan 2008 20:37:00 -0000 1.30 +++ e_mod_main.h 3 Mar 2008 09:48:37 -0000 1.31 @@ -25,40 +25,13 @@ Evas_List *instances; E_Menu *menu; int alarm_triggered; - int battery_check_mode; - Ecore_Poller *battery_check_poller; - int battery_prev_drain; - int battery_prev_ac; - int battery_prev_battery; - int battery_prev_level; -}; - -#ifdef __FreeBSD__ -#define BATTERY_STATE_NONE 0 -#define BATTERY_STATE_DISCHARGING 1 -#define BATTERY_STATE_CHARGING 2 -#define BATTERY_STATE_REMOVED 7 -#else -#define BATTERY_STATE_NONE 0 -#define BATTERY_STATE_CHARGING 1 -#define BATTERY_STATE_DISCHARGING 2 -#endif - -struct _Status -{ - /* Low battery */ - unsigned char alarm; - /* Is there a battery? */ - unsigned char has_battery; - /* charging, discharging, none */ - unsigned char state; - /* Battery level */ - double level; - /* Text */ - /* reading == % left */ - char *reading; - /* time == time left to empty / full */ - char *time; + Ecore_Exe *batget_exe; + Ecore_Event_Handler *batget_data_handler; + Ecore_Event_Handler *batget_del_handler; + int full; + int time_left; + int have_battery; + int have_power; }; EAPI extern E_Module_Api e_modapi; ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs