forked from enlightenment/enlightenment
battery modules now... works... in theory. i have to test it on a real
laptop... SVN revision: 12600
This commit is contained in:
parent
2134890874
commit
b8112af500
|
@ -268,6 +268,7 @@ images {
|
||||||
image: "e17_battery_080.png" COMP;
|
image: "e17_battery_080.png" COMP;
|
||||||
image: "e17_battery_090.png" COMP;
|
image: "e17_battery_090.png" COMP;
|
||||||
image: "e17_battery_100.png" COMP;
|
image: "e17_battery_100.png" COMP;
|
||||||
|
image: "e17_battery_ac.png" COMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
collections {
|
collections {
|
||||||
|
@ -5204,9 +5205,19 @@ collections {
|
||||||
group {
|
group {
|
||||||
name: "modules/battery/main";
|
name: "modules/battery/main";
|
||||||
max: 128 128;
|
max: 128 128;
|
||||||
|
script {
|
||||||
|
public message(Msg_Type:type, id, ...) {
|
||||||
|
if ((type == MSG_FLOAT) && (id == 1)) {
|
||||||
|
new Float:val;
|
||||||
|
val = getfarg(2);
|
||||||
|
set_state(PART:"battery", "default", val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
parts {
|
parts {
|
||||||
part {
|
part {
|
||||||
name: "battery";
|
name: "battery";
|
||||||
|
clip_to: "fade_clip";
|
||||||
description {
|
description {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
aspect: 0.669291339 0.669291339;
|
aspect: 0.669291339 0.669291339;
|
||||||
|
@ -5297,6 +5308,7 @@ collections {
|
||||||
name: "reading";
|
name: "reading";
|
||||||
type: TEXT;
|
type: TEXT;
|
||||||
effect: SOFT_SHADOW;
|
effect: SOFT_SHADOW;
|
||||||
|
clip_to: "fade_clip";
|
||||||
description {
|
description {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
align: 1.0 0.0;
|
align: 1.0 0.0;
|
||||||
|
@ -5305,7 +5317,7 @@ collections {
|
||||||
to_x: "battery";
|
to_x: "battery";
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.0 1.0;
|
relative: 1.0 0.0;
|
||||||
}
|
}
|
||||||
color: 255 255 255 255;
|
color: 255 255 255 255;
|
||||||
color3: 0 0 0 32;
|
color3: 0 0 0 32;
|
||||||
|
@ -5314,9 +5326,112 @@ collections {
|
||||||
font: "Edje Vera";
|
font: "Edje Vera";
|
||||||
size: 7;
|
size: 7;
|
||||||
min: 1 1;
|
min: 1 1;
|
||||||
align: 0.0 0.0;
|
align: 1.0 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "time";
|
||||||
|
type: TEXT;
|
||||||
|
effect: SOFT_SHADOW;
|
||||||
|
clip_to: "fade_clip";
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
align: 1.0 0.0;
|
||||||
|
rel1 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
to_x: "battery";
|
||||||
|
to_y: "reading";
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
to_y: "reading";
|
||||||
|
}
|
||||||
|
color: 255 255 255 255;
|
||||||
|
color3: 0 0 0 32;
|
||||||
|
text {
|
||||||
|
text: "00:00";
|
||||||
|
font: "Edje Vera";
|
||||||
|
size: 7;
|
||||||
|
min: 1 1;
|
||||||
|
align: 1.0 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "ac";
|
||||||
|
clip_to: "fade_clip";
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
aspect: 0.975609756 0.975609756;
|
||||||
|
align: 1.0 1.0;
|
||||||
|
max: 40 41;
|
||||||
|
visible: 0;
|
||||||
|
rel1 {
|
||||||
|
relative: 0.5 0.5;
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
normal: "e17_battery_ac.png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description {
|
||||||
|
state: "active" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "fade_clip";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 0;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
}
|
||||||
|
description {
|
||||||
|
state: "faded" 0.0;
|
||||||
|
color: 255 255 255 128;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
programs {
|
||||||
|
program {
|
||||||
|
name: "charge";
|
||||||
|
signal: "charge";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "fade_clip";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "charge2";
|
||||||
|
signal: "charge";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "active" 0.0;
|
||||||
|
target: "ac";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "discharge";
|
||||||
|
signal: "discharge";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "fade_clip";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "discharge2";
|
||||||
|
signal: "discharge";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "ac";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "unknown";
|
||||||
|
signal: "unknown";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "faded" 0.0;
|
||||||
|
target: "fade_clip";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -242,4 +242,5 @@ e17_battery_060.png \
|
||||||
e17_battery_070.png \
|
e17_battery_070.png \
|
||||||
e17_battery_080.png \
|
e17_battery_080.png \
|
||||||
e17_battery_090.png \
|
e17_battery_090.png \
|
||||||
e17_battery_100.png
|
e17_battery_100.png \
|
||||||
|
e17_battery_ac.png
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
|
@ -19,6 +19,10 @@ static void _battery_cb_face_down(void *data, Evas *e, Evas_Object *obj, voi
|
||||||
static void _battery_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _battery_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
static void _battery_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _battery_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
static int _battery_cb_event_container_resize(void *data, int type, void *event);
|
static int _battery_cb_event_container_resize(void *data, int type, void *event);
|
||||||
|
static int _battery_cb_check(void *data);
|
||||||
|
static int _battery_linux_acpi_check(Battery_Face *ef);
|
||||||
|
static int _battery_linux_apm_check(Battery_Face *ef);
|
||||||
|
static void _battery_level_set(Battery_Face *ef, double level);
|
||||||
|
|
||||||
/* public module routines. all modules must have these */
|
/* public module routines. all modules must have these */
|
||||||
void *
|
void *
|
||||||
|
@ -222,6 +226,14 @@ _battery_face_init(Battery_Face *ef)
|
||||||
|
|
||||||
_battery_face_reconfigure(ef);
|
_battery_face_reconfigure(ef);
|
||||||
|
|
||||||
|
ef->battery_check_mode = CHECK_NONE;
|
||||||
|
ef->battery_prev_drain = 1;
|
||||||
|
ef->battery_prev_ac = -1;
|
||||||
|
ef->battery_prev_battery = -1;
|
||||||
|
ef->battery_check_timer = ecore_timer_add(5.0, _battery_cb_check, ef);
|
||||||
|
|
||||||
|
_battery_cb_check(ef);
|
||||||
|
|
||||||
evas_event_thaw(ef->evas);
|
evas_event_thaw(ef->evas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,3 +359,318 @@ _battery_cb_event_container_resize(void *data, int type, void *event)
|
||||||
_battery_face_reconfigure(ef);
|
_battery_face_reconfigure(ef);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_battery_cb_check(void *data)
|
||||||
|
{
|
||||||
|
Battery_Face *ef;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
ef = data;
|
||||||
|
if (ef->battery_check_mode == 0)
|
||||||
|
{
|
||||||
|
if (e_file_is_dir("/proc/acpi"))
|
||||||
|
ef->battery_check_mode = CHECK_LINUX_ACPI;
|
||||||
|
else if (e_file_is_dir("/proc/apm"))
|
||||||
|
ef->battery_check_mode = CHECK_LINUX_APM;
|
||||||
|
}
|
||||||
|
switch (ef->battery_check_mode)
|
||||||
|
{
|
||||||
|
case CHECK_LINUX_ACPI:
|
||||||
|
ret = _battery_linux_acpi_check(ef);
|
||||||
|
break;
|
||||||
|
case CHECK_LINUX_APM:
|
||||||
|
ret = _battery_linux_acpi_check(ef);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
if (ef->battery_prev_battery != -2)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "unknown", "");
|
||||||
|
ef->battery_prev_battery = -2;
|
||||||
|
}
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "NO INFO");
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
ef->battery_check_mode = CHECK_NONE;
|
||||||
|
_battery_level_set(ef, (double)(rand() & 0xff) / 255.0);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_battery_linux_acpi_check(Battery_Face *ef)
|
||||||
|
{
|
||||||
|
Evas_List *bats;
|
||||||
|
char buf[4096], buf2[4096];
|
||||||
|
|
||||||
|
int bat_max = 0;
|
||||||
|
int bat_filled = 0;
|
||||||
|
int bat_level = 0;
|
||||||
|
int bat_drain = 1;
|
||||||
|
|
||||||
|
int bat_val = 0;
|
||||||
|
|
||||||
|
char current_status[256];
|
||||||
|
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;
|
||||||
|
|
||||||
|
/* Read some information on first run. */
|
||||||
|
bats = e_file_ls("/proc/acpi/battery");
|
||||||
|
if (!bats) return 0;
|
||||||
|
while (bats)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = bats->data;
|
||||||
|
if ((!strcmp(name, ".")) || (!strcmp(name, "..")))
|
||||||
|
{
|
||||||
|
bats = evas_list_remove_list(bats, bats);
|
||||||
|
free(name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "/proc/acpi/battery/%s/info", name);
|
||||||
|
f = fopen(buf, "r");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
int design_cap = 0;
|
||||||
|
int last_full = 0;
|
||||||
|
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s %*s", buf);
|
||||||
|
if (!strcmp(buf, "unknown")) design_cap_unknown = 1;
|
||||||
|
else sscanf(buf2, "%*[^:]: %i %*s", &design_cap);
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s %*s", buf);
|
||||||
|
if (!strcmp(buf, "unknown")) last_full_unknown = 1;
|
||||||
|
else sscanf(buf2, "%*[^:]: %i %*s", &last_full);
|
||||||
|
fclose(f);
|
||||||
|
bat_max += design_cap;
|
||||||
|
bat_filled += last_full;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "/proc/acpi/battery/%s/state", name);
|
||||||
|
f = fopen(buf, "r");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
char present[256];
|
||||||
|
char capacity_state[256];
|
||||||
|
char charging_state[256];
|
||||||
|
int rate = 1;
|
||||||
|
int level = 0;
|
||||||
|
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s", present);
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s", capacity_state);
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s", charging_state);
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s %*s", buf);
|
||||||
|
if (!strcmp(buf, "unknown")) rate_unknown = 1;
|
||||||
|
else sscanf(buf2, "%*[^:]: %i %*s", &rate);
|
||||||
|
fgets(buf2, sizeof(buf2), f); buf[sizeof(buf2) - 1] = 0;
|
||||||
|
sscanf(buf2, "%*[^:]: %250s %*s", buf);
|
||||||
|
if (!strcmp(buf, "unknown")) level_unknown = 1;
|
||||||
|
else sscanf(buf2, "%*[^:]: %i %*s", &level);
|
||||||
|
fclose(f);
|
||||||
|
if (!strcmp(present, "yes")) battery++;
|
||||||
|
if (!strcmp(charging_state, "discharging")) discharging++;
|
||||||
|
if (!strcmp(charging_state, "charging")) charging++;
|
||||||
|
bat_drain += rate;
|
||||||
|
bat_level += level;
|
||||||
|
}
|
||||||
|
bats = evas_list_remove_list(bats, bats);
|
||||||
|
free(name);
|
||||||
|
}
|
||||||
|
if (ef->battery_prev_drain < 1) ef->battery_prev_drain = 1;
|
||||||
|
if (bat_drain < 1) bat_drain = ef->battery_prev_drain;
|
||||||
|
ef->battery_prev_drain = bat_drain;
|
||||||
|
|
||||||
|
if (bat_filled > 0) bat_val = (100 * bat_level) / bat_filled;
|
||||||
|
else bat_val = 100;
|
||||||
|
|
||||||
|
if (discharging) minutes = (60 * bat_level) / bat_drain;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (bat_filled > 0)
|
||||||
|
minutes = (60 * (bat_filled - bat_level)) / bat_drain;
|
||||||
|
else
|
||||||
|
minutes = 0;
|
||||||
|
}
|
||||||
|
hours = minutes / 60;
|
||||||
|
minutes -= (hours * 60);
|
||||||
|
|
||||||
|
if ((charging) || (discharging))
|
||||||
|
{
|
||||||
|
ef->battery_prev_battery = 1;
|
||||||
|
if ((charging ) && (ef->battery_prev_ac == 0))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "charge", "");
|
||||||
|
ef->battery_prev_ac = 1;
|
||||||
|
}
|
||||||
|
else if ((discharging) && (ef->battery_prev_ac == 1))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "discharge", "");
|
||||||
|
ef->battery_prev_ac = 0;
|
||||||
|
}
|
||||||
|
if (level_unknown)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "BAD DIRVER");
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
_battery_level_set(ef, 0.0);
|
||||||
|
}
|
||||||
|
else if (rate_unknown)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%i%%", bat_val);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", buf);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
_battery_level_set(ef, (double)bat_val / 100.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%i%%", bat_val);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", buf);
|
||||||
|
snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", buf);
|
||||||
|
_battery_level_set(ef, (double)bat_val / 100.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!battery)
|
||||||
|
{
|
||||||
|
if (ef->battery_prev_battery != 0)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "unknown", "");
|
||||||
|
ef->battery_prev_battery = 0;
|
||||||
|
}
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
_battery_level_set(ef, 1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ef->battery_prev_battery == 0)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "charge", "");
|
||||||
|
ef->battery_prev_battery = 1;
|
||||||
|
}
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "FULL");
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
_battery_level_set(ef, 1.0);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_battery_linux_apm_check(Battery_Face *ef)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
f = fopen("/proc/apm", "r");
|
||||||
|
if (!f) return 0;
|
||||||
|
|
||||||
|
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 0;
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
|
||||||
|
if ((bat_flags != 0xff) && (bat_flags & 0x80))
|
||||||
|
{
|
||||||
|
if (ef->battery_prev_battery != 0)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "unknown", "");
|
||||||
|
ef->battery_prev_battery = 0;
|
||||||
|
}
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "NO BAT");
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
_battery_level_set(ef, 1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ef->battery_prev_battery = 1;
|
||||||
|
if (bat_val > 0)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%i%%", bat_val);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", buf);
|
||||||
|
_battery_level_set(ef, (double)bat_val / 100.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch( bat_stat )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "High");
|
||||||
|
_battery_level_set(ef, 1.0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "Low");
|
||||||
|
_battery_level_set(ef, 0.50);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "Danger");
|
||||||
|
_battery_level_set(ef, 0.25);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
edje_object_part_text_set(ef->bat_object, "reading", "Charge");
|
||||||
|
_battery_level_set(ef, 1.0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ac_stat == 1)
|
||||||
|
{
|
||||||
|
if ((ac_stat == 1) && (ef->battery_prev_ac == 0))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "charge", "");
|
||||||
|
ef->battery_prev_ac = 1;
|
||||||
|
}
|
||||||
|
else if ((ac_stat == 0) && (ef->battery_prev_ac == 1))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ef->bat_object, "discharge", "");
|
||||||
|
ef->battery_prev_ac = 0;
|
||||||
|
}
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", "--:--");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hours = time_val / 3600;
|
||||||
|
minutes = (time_val / 60) % 60;
|
||||||
|
snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
|
||||||
|
edje_object_part_text_set(ef->bat_object, "time", buf);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_battery_level_set(Battery_Face *ef, double level)
|
||||||
|
{
|
||||||
|
Edje_Message_Float msg;
|
||||||
|
|
||||||
|
if (level < 0.0) level = 0.0;
|
||||||
|
else if (level > 1.0) level = 1.0;
|
||||||
|
msg.val = level;
|
||||||
|
edje_object_message_send(ef->bat_object, EDJE_MESSAGE_FLOAT, 1, &msg);
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,10 @@ typedef struct _Config Config;
|
||||||
typedef struct _Battery Battery;
|
typedef struct _Battery Battery;
|
||||||
typedef struct _Battery_Face Battery_Face;
|
typedef struct _Battery_Face Battery_Face;
|
||||||
|
|
||||||
|
#define CHECK_NONE 0
|
||||||
|
#define CHECK_LINUX_ACPI 1
|
||||||
|
#define CHECK_LINUX_APM 2
|
||||||
|
|
||||||
struct _Config
|
struct _Config
|
||||||
{
|
{
|
||||||
int width;
|
int width;
|
||||||
|
@ -36,6 +40,12 @@ struct _Battery_Face
|
||||||
Evas_Coord xx, yy;
|
Evas_Coord xx, yy;
|
||||||
Evas_Coord fx, fy, fw;
|
Evas_Coord fx, fy, fw;
|
||||||
|
|
||||||
|
int battery_check_mode;
|
||||||
|
Ecore_Timer *battery_check_timer;
|
||||||
|
int battery_prev_drain;
|
||||||
|
int battery_prev_ac;
|
||||||
|
int battery_prev_battery;
|
||||||
|
|
||||||
Ecore_Event_Handler *ev_handler_container_resize;
|
Ecore_Event_Handler *ev_handler_container_resize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue