aboutsummaryrefslogtreecommitdiffstats
path: root/applets/battery/battery-acpi.c
blob: c44dd121ade2d784f63353b1a3c9dfc2c87ea9c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * (C) 2008 Intel.
 *
 * Licensed under the GPL v2 or greater.
 */

#include "battery.h"
#include <libacpi.h>

global_t global;
adapter_t *ac;
int batt_state, ac_state;

int pm_support(void)
{
	if(check_acpi_support() == NOT_SUPPORTED){
		return 0;
	}

	ac = &global.adapt;

	batt_state = init_acpi_batt(&global);
	ac_state = init_acpi_acadapt(&global);

	return 1;
}

const char* pm_battery_icon(void)
{
	const char *icon;
	battery_t *binfo;

        /* No battery available (not present, disabled, or something
           else. Silently do nothing. */
	if (batt_state != SUCCESS) {
		return NULL;
	}

	read_acpi_batt(0);
	read_acpi_acstate(&global);

	binfo = &batteries[0];

	if (binfo->batt_state == B_ERR) {
		g_warning("Couldn't read battery state\n");
		return NULL;
	}

	if (!binfo->present) {
		/* Battery is removed */
		icon = "ac-adapter.png";
		return icon;
	}

	if(ac_state == SUCCESS && ac->ac_state == P_AC) {
		/* We're charging */
		if (binfo->percentage < 10)
			icon = "battery-charging-000.png";
		else if (binfo->percentage < 30)
			icon = "battery-charging-020.png";
		else if (binfo->percentage < 50)
			icon = "battery-charging-040.png";
		else if (binfo->percentage < 70)
			icon = "battery-charging-060.png";
		else if (binfo->percentage < 90)
			icon = "battery-charging-080.png";
		else
			icon = "battery-charging-100.png";

	} else {
		if (binfo->percentage < 10)
			icon = "battery-discharging-000.png";
		else if (binfo->percentage < 30)
			icon = "battery-discharging-020.png";
		else if (binfo->percentage < 50)
			icon = "battery-discharging-040.png";
		else if (binfo->percentage < 70)
			icon = "battery-discharging-060.png";
		else if (binfo->percentage < 90)
			icon = "battery-discharging-080.png";
		else
			icon = "battery-discharging-100.png";
	}

	return icon;
}