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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include "power.h"
void status_power()
{
char *stline;
size_t stlen;
FILE *stfile;
int batt_now = 0;
int batt_full = -1;
int batt_percent = -1;
int batt_current = 1;
int batt_voltage = 0;
float batt_time = -1;
float batt_watts = -1;
stfile = fopen("/sys/class/power_supply/BAT0/energy_now", "r");
if (stfile != NULL)
{
stline = NULL;
stlen = getline(&stline, &stlen, stfile);
fclose(stfile);
batt_now = atoi(stline);
free(stline);
}
stfile = fopen("/sys/class/power_supply/BAT0/energy_full", "r");
if (stfile != NULL)
{
stline = NULL;
stlen = getline(&stline, &stlen, stfile);
fclose(stfile);
batt_full = atoi(stline);
free(stline);
}
stfile = fopen("/sys/class/power_supply/BAT0/current_now", "r");
if (stfile != NULL)
{
stline = NULL;
stlen = getline(&stline, &stlen, stfile);
fclose(stfile);
batt_current = atoi(stline);
free(stline);
}
stfile = fopen("/sys/class/power_supply/BAT0/voltage_now", "r");
if (stfile != NULL)
{
stline = NULL;
stlen = getline(&stline, &stlen, stfile);
fclose(stfile);
batt_voltage = atoi(stline);
free(stline);
}
// Hack for chinese battery.
//batt_now -= 27220000;
//batt_full = 27000000;
if (batt_full > 0)
batt_percent = batt_now / (batt_full / 100);
if (batt_percent <= 40) // 40
{
if (batt_percent <= 25) // 25
{
if (batt_percent <= 10) // 10
fputs("^fg(red)", stdout);
else // 11-25%
fputs("^fg(orange)", stdout);
}
else // 26-40%
fputs("^fg(yellow)", stdout);
}
else
{
if (batt_percent > 70) // 70
fputs("^fg(white)", stdout);
else // 41-70%
fputs("^fg(green)", stdout);
}
batt_time = (float)batt_now / (float)batt_current;
batt_watts = ((float)batt_voltage / 1000000) * ((float)batt_current / 10000000);
if (batt_watts == 0) // fully charged and on AC
printf(" BAT0: %d%% _ _ ", batt_percent);
else
printf(" BAT0: %d%% %.1fh %.1fW ", batt_percent, batt_time, batt_watts);
//fputs(" Power status ", stdout);
}
|