aboutsummaryrefslogtreecommitdiff
path: root/battery.c
diff options
context:
space:
mode:
authorInqiyad Sabr <sabr@ariamath.xyz>2025-10-19 23:17:43 +0600
committerInqiyad Sabr <sabr@ariamath.xyz>2025-10-19 23:17:43 +0600
commitea5380fccb9f962203726540d69cb490048de7c0 (patch)
treeceb8f56cef8deb086a328bfe840e327da7f16452 /battery.c
Add files
Diffstat (limited to 'battery.c')
-rw-r--r--battery.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/battery.c b/battery.c
new file mode 100644
index 0000000..20283fd
--- /dev/null
+++ b/battery.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <string.h>
+#include "block.h"
+#define DIR "/sys/class/power_supply/BAT0"
+#define EN DIR"/energy_now"
+#define EF DIR"/energy_full"
+#define ST DIR"/status"
+FILE *en;
+FILE *ef;
+FILE *st;
+int c, state, bat_delay = 6;
+float en_n, ef_n;
+float p;
+char pch[13], icon[5];
+void battery(void) {
+ if (bat_delay++ < 6) goto show_stat;
+ else bat_delay = 0;
+ if (!en) en = fopen(EN,"r");
+ if (!ef) ef = fopen(EF,"r");
+ if (!st) st = fopen(ST,"r");
+ if (en && ef && st) {
+ rewind(en);
+ rewind(ef);
+ rewind(st);
+ en_n = ef_n = 0;
+ while((c = fgetc(en)) != '\n')
+ en_n = 10 * en_n + (c - '0');
+ while((c = fgetc(ef)) != '\n')
+ ef_n = 10 * ef_n + (c - '0');
+ p = en_n * 100 / ef_n;
+ state = fgetc(st);
+ switch(state) {
+ case 'N': strncpy(icon,"",4); break;
+ case 'C': strncpy(icon,"󱐋",5); break;
+ case 'D': if (p > 0 && p <= 10) strncpy(icon," ",5);
+ else if (p > 10 && p <= 30) strncpy(icon," ",5);
+ else if (p > 30 && p <= 50) strncpy(icon," ",5);
+ else if (p > 50 && p <= 79) strncpy(icon," ",5);
+ else if (p > 79) strncpy(icon," ",5);
+ } snprintf(pch,13,"%s %02.2f%%",icon,p);
+ }
+show_stat:
+ if (state == 'D')
+ block(pch,"#222222","#83a59899","#83a59899");
+ else if (p < 30)
+ block(pch,"#222222","#ea544399","#ea544399");
+ else if (state == 'N' || state == 'C')
+ block(pch,"#222222","#dfb24999","#dfb24999");
+}