From 6c36abf3fbcea2a90b21b8c173245779952c105f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=88=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=82=D0=BE=D0=BA=D0=B8?= =?UTF-8?q?=D1=9B-=D0=A8=D1=83=D0=BC=D0=B0=D1=80=D0=B0=D1=86?= Date: Thu, 19 May 2022 04:50:55 +0200 Subject: [PATCH] initial commit --- Makefile | 32 +++++++ lobat.mp3 | Bin 0 -> 17180 bytes main.c | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 284 insertions(+) create mode 100644 Makefile create mode 100644 lobat.mp3 create mode 100644 main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..11a03ac --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +## +# batt-signal +# +# @file +# @version 0.1 + +PREFIX = /usr/local +SHAREPREFIX = $(PREFIX)/share/batt-signal + +all: batt-signal + +CFLAGS = -O2 +CPPFLAGS = -DSHAREPREFIX=\"$(SHAREPREFIX)\" +LIBS = -L/usr/X11R6/lib -lX11 -lXxf86vm -lXft +INCS = -I/usr/include/freetype2 + +batt-signal: main.c + gcc main.c -o batt-signal $(LIBS) $(INCS) $(CFLAGS) $(CPPFLAGS) + +clean: + rm -f batt-signal + +install: all + mkdir -p $(DESTDIR)$(PREFIX)/bin + cp -f batt-signal $(DESTDIR)$(PREFIX)/bin + + mkdir -p $(DESTDIR)$(SHAREPREFIX) + cp -f lobat.mp3 $(DESTDIR)$(SHAREPREFIX) + +.PHONY: all install clean + +# end diff --git a/lobat.mp3 b/lobat.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9197152ca334ce8a802be27c6545ffa985122ed3 GIT binary patch literal 17180 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 W0tNuQ2mnC(KQ!_GtN%we@V@}^$!hZe literal 0 HcmV?d00001 diff --git a/main.c b/main.c new file mode 100644 index 0000000..484e6f1 --- /dev/null +++ b/main.c @@ -0,0 +1,252 @@ +/* +██████╗░░█████╗░████████╗████████╗░░░░░░░██████╗██╗░██████╗░███╗░░██╗░█████╗░██╗░░░░░ +██╔══██╗██╔══██╗╚══██╔══╝╚══██╔══╝░░░░░░██╔════╝██║██╔════╝░████╗░██║██╔══██╗██║░░░░░ +██████╦╝███████║░░░██║░░░░░░██║░░░█████╗╚█████╗░██║██║░░██╗░██╔██╗██║███████║██║░░░░░ +██╔══██╗██╔══██║░░░██║░░░░░░██║░░░╚════╝░╚═══██╗██║██║░░╚██╗██║╚████║██╔══██║██║░░░░░ +██████╦╝██║░░██║░░░██║░░░░░░██║░░░░░░░░░██████╔╝██║╚██████╔╝██║░╚███║██║░░██║███████╗ +╚═════╝░╚═╝░░╚═╝░░░╚═╝░░░░░░╚═╝░░░░░░░░░╚═════╝░╚═╝░╚═════╝░╚═╝░░╚══╝╚═╝░░╚═╝╚══════╝ +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FONT_SIZE 24 + + + +typedef struct { + unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} Hints; + + + + +int width, height; +char *message = "Battery is low!!"; + + + + +void catch_fire(char *, int); +void draw_ui(Display *, Window, Visual *, Colormap, int); +void window_attr(Display *, Window, int); +void alert(); + + +enum state { + Alert, + Normal +}; + + +int main(void) { + + time_t lastalert = 0; // a long time ago + enum state laststate = Normal, curstate = Normal; + + + while (1) { + FILE *battery = fopen("/sys/class/power_supply/BAT0/capacity","r"); + FILE *status = fopen("/sys/class/power_supply/BAT0/status","r"); + if(battery == NULL || status == NULL) { + catch_fire("batt-signal : Cannot find battery.\n", 100); + } + + + int cap; + char bat_status[20] = ""; + + fscanf(battery,"%d", &cap); + fscanf(status, "%s", bat_status); + + curstate = cap <= 105 && strcmp(bat_status, "Discharging") == 0 ? Alert : Normal; + if (curstate == Alert && (time(NULL) - lastalert >= 180 || laststate == Normal)) { + alert(); + lastalert = time(NULL); + } + laststate = curstate; +printf("%s : %d\n", bat_status, cap); + + fclose(battery); + fclose(status); + sleep(1); + } + + + return 0; +} + + + + + + +void catch_fire(char *string, int error) { + fprintf(stderr, string); + exit(error); +} + + + + + +void draw_ui(Display *d, Window w, Visual *visual, Colormap cmap, int s) { + + // FONT SHENANIGANS + char font_name[strlen("monospace-") + 2]; + sprintf(font_name, "monospace-%d", FONT_SIZE); + XftFont *font = XftFontOpenName(d, s, font_name); + + printf("lol1\n"); + // FONT COLORS + XftColor xft_black, xft_white; + XftColorAllocName(d, visual, cmap, "black", &xft_black); + XftColorAllocName(d, visual, cmap, "white", &xft_white); + + XftDraw *xftdraw = XftDrawCreate(d, w, visual, cmap); + + + + // MAKE WHITE RECT + int white_rect_x = width / 24; + int white_rect_y = height / 12; + int white_rect_width = width / 18; + int white_rect_height = height / 6; + + XftDrawRect(xftdraw, &xft_white, white_rect_x, white_rect_y, white_rect_width, white_rect_height); + + + + // MAKE BLACK RECT + int black_rect_x = width / 24 + width / 140; + int black_rect_y = height / 12 + height / 100; + int black_rect_width = width / 24; + int black_rect_height = height / 8; + + XftDrawRect(xftdraw, &xft_black, black_rect_x, black_rect_y, black_rect_width, black_rect_height); + + + + // MAKE WHITE BAR + int bar_rect_x = width / 24 + width / 36 - width / 120; + int bar_rect_y = height / 12 - height / 100; + int bar_rect_width = width / 60; + int bar_rect_height = height / 60; + + XftDrawRect(xftdraw, &xft_white, bar_rect_x, bar_rect_y, bar_rect_width, bar_rect_height); + + + // PRINT PASS MESSAGE + XftDrawString8(xftdraw, &xft_white, font, white_rect_x *3, height/6, message, strlen(message)); + + +} + +void alert() + { + Display *d = XOpenDisplay(NULL); + if (d == NULL) + catch_fire("Cannot open display\n", 1); + + int s = DefaultScreen(d); + int depth = DefaultDepth(d, s); + width = DisplayWidth(d, s); + height = DisplayHeight(d, s); + + Window w; + Visual *visual = DefaultVisual(d, s); + Colormap cmap = DefaultColormap(d, s); + + + + // IGNORES WM RULES + XSetWindowAttributes attributes; + attributes.override_redirect = True; + attributes.background_pixel = BlackPixel(d, s); + + + // MAKE THE WINDOW + w = XCreateWindow(d, XRootWindow(d, s), 0, 0, width, height, 0, depth, InputOutput, visual, CWBackPixel | CWOverrideRedirect, &attributes); + + + // SET WINDOW ATTRIBUTES + window_attr(d, w, s); + + // DRAW THE RECTANGLES AND STRINGS + draw_ui(d, w, visual, cmap, s); + + + + //PLAY THE SOUND + pid_t child_id; + + child_id = fork(); + + if (child_id == -1) { + catch_fire("Couldn't fork\n", 1); + } else if (child_id == 0) { + execl("/usr/bin/mpg123", "mpg123", SHAREPREFIX "/lobat.mp3", NULL); + } + + while (1) { + + int foo; + KeySym ksym; + XEvent e; + + XNextEvent(d, &e); + + // CHECK IF ANYTHING IS PRESSED + if(e.type == KeyPress) + break; + + draw_ui(d, w, visual, cmap, s); + } + + XCloseDisplay(d); + } + +void window_attr(Display *d, Window w, int s) { + + int mode_count; + + // VIDEO MODES + XF86VidModeModeInfo **modes, *video_mode; + XF86VidModeGetAllModeLines(d, s, &mode_count, &modes); + video_mode = modes[0]; + + // DISABLE DECORATIONS + Hints hints; + hints.flags = 2; + hints.decorations = 0; + + Atom roperty = XInternAtom(d, "_MOTIF_WM_HINTS", True); + + XSelectInput(d, w, ExposureMask | KeyPressMask); + XMapWindow(d, w); + + // SETTING FULLSCREEN + XF86VidModeSwitchToMode(d, s, video_mode); + XF86VidModeSetViewPort(d, s, 0, 0); + XMoveResizeWindow(d, w, width/3, height/3, width/3, height/3); + XMapRaised(d, w); + + XGrabPointer(d, w, True, 0, GrabModeAsync, GrabModeAsync, w, 0L, CurrentTime); + XGrabKeyboard(d, w, True, GrabModeAsync, GrabModeAsync, CurrentTime); + +}