intiial commit
This commit is contained in:
BIN
Obj/brightness.o
Normal file
BIN
Obj/brightness.o
Normal file
Binary file not shown.
BIN
Obj/main.o
Normal file
BIN
Obj/main.o
Normal file
Binary file not shown.
62
build/Makefile
Normal file
62
build/Makefile
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Makefile located in build/ directory
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
# Compiler Flags
|
||||||
|
CFLAGS = -I../include -Wall
|
||||||
|
|
||||||
|
# Linker Flags
|
||||||
|
LDFLAGS = -lX11 -lm
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
SRC_DIR = ../src
|
||||||
|
OBJ_DIR = ../Obj
|
||||||
|
BUILD_DIR = .
|
||||||
|
INCLUDE_DIR = ../include
|
||||||
|
|
||||||
|
# Source Files
|
||||||
|
SRC = $(SRC_DIR)/main.c $(SRC_DIR)/brightness.c
|
||||||
|
|
||||||
|
# Object Files
|
||||||
|
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
|
||||||
|
|
||||||
|
# Target Binary
|
||||||
|
TARGET = brightness
|
||||||
|
|
||||||
|
# Installation Directory
|
||||||
|
PREFIX ?= /usr/local
|
||||||
|
BIN_DIR = $(PREFIX)/bin
|
||||||
|
|
||||||
|
# Default Target
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
# Link Object Files to Create Binary
|
||||||
|
$(TARGET): $(OBJ)
|
||||||
|
$(CC) -o $(BUILD_DIR)/$@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
# Compile Source Files to Object Files
|
||||||
|
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
# Create Object Directory if it Doesn't Exist
|
||||||
|
$(OBJ_DIR):
|
||||||
|
mkdir -p $(OBJ_DIR)
|
||||||
|
|
||||||
|
# Install the Binary to /usr/local/bin/
|
||||||
|
install: $(TARGET)
|
||||||
|
@echo "Installing $(TARGET) to $(BIN_DIR)/$(TARGET)"
|
||||||
|
mkdir -p $(BIN_DIR)
|
||||||
|
install -m 755 $(BUILD_DIR)/$(TARGET) $(BIN_DIR)/$(TARGET)
|
||||||
|
|
||||||
|
# Uninstall the Binary from /usr/local/bin/
|
||||||
|
uninstall:
|
||||||
|
@echo "Uninstalling $(TARGET) from $(BIN_DIR)/$(TARGET)"
|
||||||
|
rm -f $(BIN_DIR)/$(TARGET)
|
||||||
|
|
||||||
|
# Clean Build Artifacts
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJ) $(BUILD_DIR)/$(TARGET)
|
||||||
|
|
||||||
|
# Phony Targets
|
||||||
|
.PHONY: all clean install uninstall
|
||||||
BIN
build/brightness
Executable file
BIN
build/brightness
Executable file
Binary file not shown.
0
docs/brightness.1
Normal file
0
docs/brightness.1
Normal file
14
include/brightness.h
Normal file
14
include/brightness.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// brightness.h
|
||||||
|
#ifndef BRIGHTNESS_H
|
||||||
|
#define BRIGHTNESS_H
|
||||||
|
|
||||||
|
#define BRIGHTNESS_PATH "/sys/class/backlight/intel_backlight/brightness"
|
||||||
|
#define MAX_BRIGHTNESS_PATH "/sys/class/backlight/intel_backlight/max_brightness"
|
||||||
|
|
||||||
|
int get_max_brightness();
|
||||||
|
int get_current_brightness();
|
||||||
|
void set_brightness(int value, int raw, int no_display);
|
||||||
|
void adjust_brightness(const char *direction, int no_display);
|
||||||
|
void display_brightness(int brightness);
|
||||||
|
|
||||||
|
#endif // BRIGHTNESS_H
|
||||||
16
include/brightness.h.bk
Normal file
16
include/brightness.h.bk
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef BRIGHTNESS_H
|
||||||
|
#define BRIGHTNESS_H
|
||||||
|
|
||||||
|
#define BRIGHTNESS_PATH "/sys/class/backlight/intel_backlight/brightness"
|
||||||
|
#define MAX_BRIGHTNESS_PATH "/sys/class/backlight/intel_backlight/max_brightness"
|
||||||
|
|
||||||
|
void set_brightness(int value, int raw);
|
||||||
|
void adjust_brightness(const char *direction);
|
||||||
|
void display_brightness(int brightness);
|
||||||
|
int get_max_brightness();
|
||||||
|
int get_current_brightness();
|
||||||
|
void list_brightness_devices(const char *class_filter);
|
||||||
|
int check_brightness_paths();
|
||||||
|
void set_device(const char *device, const char *class);
|
||||||
|
|
||||||
|
#endif // BRIGHTNESS_H
|
||||||
BIN
obj/main.o
Normal file
BIN
obj/main.o
Normal file
Binary file not shown.
185
src/brightness.c
Normal file
185
src/brightness.c
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
// brightness.c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#include "brightness.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int get_max_brightness() {
|
||||||
|
FILE *file = fopen(MAX_BRIGHTNESS_PATH, "r");
|
||||||
|
if (file == NULL) {
|
||||||
|
perror("Failed to open max brightness file");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
int max_brightness;
|
||||||
|
if (fscanf(file, "%d", &max_brightness) != 1) {
|
||||||
|
perror("Failed to read max brightness value");
|
||||||
|
fclose(file);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
return max_brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_current_brightness() {
|
||||||
|
FILE *file = fopen(BRIGHTNESS_PATH, "r");
|
||||||
|
if (file == NULL) {
|
||||||
|
perror("Failed to open brightness file");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
int brightness;
|
||||||
|
if (fscanf(file, "%d", &brightness) != 1) {
|
||||||
|
perror("Failed to read brightness value");
|
||||||
|
fclose(file);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
return brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_brightness(int value, int raw, int no_display) {
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
if (!raw) {
|
||||||
|
value = (value * max_brightness) / 100;
|
||||||
|
}
|
||||||
|
FILE *brightness_file = fopen(BRIGHTNESS_PATH, "w");
|
||||||
|
if (brightness_file == NULL) {
|
||||||
|
perror("Failed to open brightness file for writing");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (fprintf(brightness_file, "%d", value) < 0) {
|
||||||
|
perror("Failed to write brightness value");
|
||||||
|
fclose(brightness_file);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
fclose(brightness_file);
|
||||||
|
if (!no_display) {
|
||||||
|
display_brightness(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void adjust_brightness(const char *direction, int no_display) {
|
||||||
|
int brightness = get_current_brightness();
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
|
||||||
|
if (strcmp(direction, "up") == 0) {
|
||||||
|
brightness += max_brightness / 10;
|
||||||
|
} else if (strcmp(direction, "down") == 0) {
|
||||||
|
brightness -= max_brightness / 10;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: Invalid adjust direction. Use 'up' or 'down'.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (brightness < 0) {
|
||||||
|
brightness = 0;
|
||||||
|
} else if (brightness > max_brightness) {
|
||||||
|
brightness = max_brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_brightness(brightness, 1, no_display);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_icon(Display *d, Window w, GC gc) {
|
||||||
|
int circle_radius = 22; // Radius for a smaller circle
|
||||||
|
int ray_length = 27; // Length of the rays
|
||||||
|
int line_thickness = 5; // Increased line thickness
|
||||||
|
int y_offset = 10; // Amount to move the icon down
|
||||||
|
|
||||||
|
// Set the line attributes to have thicker lines with rounded edges
|
||||||
|
XSetLineAttributes(d, gc, line_thickness, LineSolid, CapRound, JoinRound);
|
||||||
|
|
||||||
|
// Draw the smaller center circle, moved down by y_offset
|
||||||
|
XDrawArc(d, w, gc, 100 - circle_radius, 40 - circle_radius + y_offset, 2 * circle_radius, 2 * circle_radius, 0, 360 * 64);
|
||||||
|
|
||||||
|
// Draw the rays with adjusted length, moved down by y_offset
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
double angle = i * M_PI / 4.0;
|
||||||
|
int x1 = 100 + (int)((circle_radius + 5) * cos(angle)); // Start just outside the circle
|
||||||
|
int y1 = 40 + (int)((circle_radius + 5) * sin(angle)) + y_offset;
|
||||||
|
int x2 = 100 + (int)((circle_radius + ray_length) * cos(angle)); // Extend to ray_length
|
||||||
|
int y2 = 40 + (int)((circle_radius + ray_length) * sin(angle)) + y_offset;
|
||||||
|
XDrawLine(d, w, gc, x1, y1, x2, y2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void display_brightness(int brightness) {
|
||||||
|
Display *d;
|
||||||
|
Window w;
|
||||||
|
XEvent e;
|
||||||
|
int screen;
|
||||||
|
unsigned int display_width, display_height;
|
||||||
|
int width = 200, height = 120;
|
||||||
|
int sections = 10;
|
||||||
|
int graph_height = 10;
|
||||||
|
|
||||||
|
if ((d = XOpenDisplay(NULL)) == NULL) {
|
||||||
|
fprintf(stderr, "Cannot open display\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
screen = DefaultScreen(d);
|
||||||
|
display_width = DisplayWidth(d, screen);
|
||||||
|
display_height = DisplayHeight(d, screen);
|
||||||
|
|
||||||
|
w = XCreateSimpleWindow(d, RootWindow(d, screen), (display_width - width) / 2, (display_height - height) / 2, width, height, 1,
|
||||||
|
BlackPixel(d, screen), WhitePixel(d, screen));
|
||||||
|
XSetWindowBackground(d, w, 0xD3D3D3); // Light gray
|
||||||
|
XStoreName(d, w, "BrightnessControl");
|
||||||
|
XClassHint *classHint = XAllocClassHint();
|
||||||
|
if (classHint) {
|
||||||
|
classHint->res_name = "brightnesscontrol";
|
||||||
|
classHint->res_class = "BrightnessControl";
|
||||||
|
XSetClassHint(d, w, classHint);
|
||||||
|
XFree(classHint);
|
||||||
|
}
|
||||||
|
|
||||||
|
XSelectInput(d, w, ExposureMask | KeyPressMask | StructureNotifyMask);
|
||||||
|
XMapWindow(d, w);
|
||||||
|
|
||||||
|
GC gc = XCreateGC(d, w, 0, NULL);
|
||||||
|
GC bg_gc = XCreateGC(d, w, 0, NULL);
|
||||||
|
XSetForeground(d, gc, BlackPixel(d, screen));
|
||||||
|
XSetBackground(d, bg_gc, WhitePixel(d, screen));
|
||||||
|
XSetLineAttributes(d, gc, 3, LineSolid, CapButt, JoinMiter);
|
||||||
|
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
|
||||||
|
// Wait for the window to be mapped
|
||||||
|
while (1) {
|
||||||
|
XNextEvent(d, &e);
|
||||||
|
if (e.type == MapNotify) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the icon
|
||||||
|
draw_icon(d, w, gc);
|
||||||
|
|
||||||
|
// Draw the background for graph
|
||||||
|
XSetForeground(d, bg_gc, 0xA9A9A9); // Dark gray
|
||||||
|
XFillRectangle(d, w, bg_gc, 10, 100, 180, graph_height);
|
||||||
|
|
||||||
|
// Draw the graph
|
||||||
|
int filled_sections = (int)((brightness / (double)max_brightness) * sections);
|
||||||
|
for (int i = 0; i < sections; ++i) {
|
||||||
|
if (i < filled_sections) {
|
||||||
|
XSetForeground(d, gc, 0xFFFFFF); // White
|
||||||
|
} else {
|
||||||
|
XSetForeground(d, gc, 0xA9A9A9); // Dark gray
|
||||||
|
}
|
||||||
|
XFillRectangle(d, w, gc, 10 + i * (180 / sections), 100, (180 / sections) - 2, graph_height);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFlush(d);
|
||||||
|
sleep(1); // Display the window for a brief period
|
||||||
|
XDestroyWindow(d, w);
|
||||||
|
XCloseDisplay(d);
|
||||||
|
}
|
||||||
165
src/brightness.c.bak
Normal file
165
src/brightness.c.bak
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#include "brightness.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int get_max_brightness() {
|
||||||
|
FILE *file = fopen(MAX_BRIGHTNESS_PATH, "r");
|
||||||
|
if (file == NULL) {
|
||||||
|
perror("Failed to open max brightness file");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
int max_brightness;
|
||||||
|
fscanf(file, "%d", &max_brightness);
|
||||||
|
fclose(file);
|
||||||
|
return max_brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_current_brightness() {
|
||||||
|
FILE *file = fopen(BRIGHTNESS_PATH, "r");
|
||||||
|
if (file == NULL) {
|
||||||
|
perror("Failed to open brightness file");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
int brightness;
|
||||||
|
fscanf(file, "%d", &brightness);
|
||||||
|
fclose(file);
|
||||||
|
return brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_brightness(int value, int raw) {
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
if (!raw) {
|
||||||
|
value = (value * max_brightness) / 100;
|
||||||
|
}
|
||||||
|
FILE *brightness_file = fopen(BRIGHTNESS_PATH, "w");
|
||||||
|
if (brightness_file == NULL) {
|
||||||
|
perror("Failed to open brightness file");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
fprintf(brightness_file, "%d", value);
|
||||||
|
fclose(brightness_file);
|
||||||
|
display_brightness(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void adjust_brightness(const char *direction) {
|
||||||
|
int brightness = get_current_brightness();
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
|
||||||
|
if (strcmp(direction, "up") == 0) {
|
||||||
|
brightness += max_brightness / 10;
|
||||||
|
} else if (strcmp(direction, "down") == 0) {
|
||||||
|
brightness -= max_brightness / 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (brightness < 0) {
|
||||||
|
brightness = 0;
|
||||||
|
} else if (brightness > max_brightness) {
|
||||||
|
brightness = max_brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_brightness(brightness, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_icon(Display *d, Window w, GC gc) {
|
||||||
|
int circle_radius = 22; // Radius for a smaller circle
|
||||||
|
int ray_length = 27; // Length of the rays
|
||||||
|
int line_thickness = 5; // Increased line thickness
|
||||||
|
int y_offset = 10; // Amount to move the icon down
|
||||||
|
|
||||||
|
// Set the line attributes to have thicker lines with rounded edges
|
||||||
|
XSetLineAttributes(d, gc, line_thickness, LineSolid, CapRound, JoinRound);
|
||||||
|
|
||||||
|
// Draw the smaller center circle, moved down by y_offset
|
||||||
|
XDrawArc(d, w, gc, 100 - circle_radius, 40 - circle_radius + y_offset, 2 * circle_radius, 2 * circle_radius, 0, 360 * 64);
|
||||||
|
|
||||||
|
// Draw the rays with adjusted length, moved down by y_offset
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
int angle = i * M_PI / 4;
|
||||||
|
int x1 = 100 + (circle_radius + 5) * cos(angle); // Start just outside the circle
|
||||||
|
int y1 = 40 + (circle_radius + 5) * sin(angle) + y_offset;
|
||||||
|
int x2 = 100 + (circle_radius + ray_length) * cos(angle); // Extend to ray_length
|
||||||
|
int y2 = 40 + (circle_radius + ray_length) * sin(angle) + y_offset;
|
||||||
|
XDrawLine(d, w, gc, x1, y1, x2, y2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void display_brightness(int brightness) {
|
||||||
|
Display *d;
|
||||||
|
Window w;
|
||||||
|
XEvent e;
|
||||||
|
int screen;
|
||||||
|
unsigned int display_width, display_height;
|
||||||
|
int width = 200, height = 120;
|
||||||
|
int sections = 10;
|
||||||
|
int graph_height = 10;
|
||||||
|
|
||||||
|
if ((d = XOpenDisplay(NULL)) == NULL) {
|
||||||
|
fprintf(stderr, "Cannot open display\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
screen = DefaultScreen(d);
|
||||||
|
display_width = DisplayWidth(d, screen);
|
||||||
|
display_height = DisplayHeight(d, screen);
|
||||||
|
|
||||||
|
w = XCreateSimpleWindow(d, RootWindow(d, screen), (display_width - width) / 2, (display_height - height) / 2, width, height, 1,
|
||||||
|
BlackPixel(d, screen), WhitePixel(d, screen));
|
||||||
|
XSetWindowBackground(d, w, 0xD3D3D3); // Light gray
|
||||||
|
XStoreName(d, w, "BrightnessControl");
|
||||||
|
XClassHint *classHint = XAllocClassHint();
|
||||||
|
classHint->res_name = "brightnesscontrol";
|
||||||
|
classHint->res_class = "BrightnessControl";
|
||||||
|
XSetClassHint(d, w, classHint);
|
||||||
|
XFree(classHint);
|
||||||
|
|
||||||
|
XSelectInput(d, w, ExposureMask | KeyPressMask | StructureNotifyMask);
|
||||||
|
XMapWindow(d, w);
|
||||||
|
|
||||||
|
GC gc = XCreateGC(d, w, 0, NULL);
|
||||||
|
GC bg_gc = XCreateGC(d, w, 0, NULL);
|
||||||
|
XSetForeground(d, gc, BlackPixel(d, screen));
|
||||||
|
XSetBackground(d, bg_gc, WhitePixel(d, screen));
|
||||||
|
XSetLineAttributes(d, gc, 3, LineSolid, CapButt, JoinMiter);
|
||||||
|
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
|
||||||
|
// Wait for the window to be mapped
|
||||||
|
while (1) {
|
||||||
|
XNextEvent(d, &e);
|
||||||
|
if (e.type == MapNotify) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the icon
|
||||||
|
draw_icon(d, w, gc);
|
||||||
|
|
||||||
|
// Draw the background for graph
|
||||||
|
XSetForeground(d, bg_gc, 0xA9A9A9); // Dark gray
|
||||||
|
XFillRectangle(d, w, bg_gc, 10, 100, 180, graph_height);
|
||||||
|
|
||||||
|
// Draw the graph
|
||||||
|
int filled_sections = (int)((brightness / (double)max_brightness) * sections);
|
||||||
|
for (int i = 0; i < sections; ++i) {
|
||||||
|
if (i < filled_sections) {
|
||||||
|
XSetForeground(d, gc, 0xFFFFFF); // White
|
||||||
|
} else {
|
||||||
|
XSetForeground(d, gc, 0xA9A9A9); // Dark gray
|
||||||
|
}
|
||||||
|
XFillRectangle(d, w, gc, 10 + i * (180 / sections), 100, 180 / sections - 2, graph_height);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFlush(d);
|
||||||
|
sleep(1); // Display the window for a brief period
|
||||||
|
XDestroyWindow(d, w);
|
||||||
|
XCloseDisplay(d);
|
||||||
|
}
|
||||||
BIN
src/brightness.o
Normal file
BIN
src/brightness.o
Normal file
Binary file not shown.
80
src/main.c
Normal file
80
src/main.c
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
// main.c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "brightness.h"
|
||||||
|
|
||||||
|
void print_usage(const char *prog_name) {
|
||||||
|
fprintf(stderr, "Usage: %s [--machine-readable|-m] [--human-readable|-hr] [--adjust|-a up|down] [--set|-s <value>] [--nodisplay|-nd]\n", prog_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
int show_machine_brightness = 0;
|
||||||
|
int show_human_brightness = 0;
|
||||||
|
const char *adjust_direction = NULL;
|
||||||
|
int set_brightness_value = -1;
|
||||||
|
int set_brightness_raw = 0;
|
||||||
|
int no_display = 0; // New flag for --nodisplay
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
print_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "--machine-readable") == 0 || strcmp(argv[i], "-m") == 0) {
|
||||||
|
show_machine_brightness = 1;
|
||||||
|
} else if (strcmp(argv[i], "--human-readable") == 0 || strcmp(argv[i], "-hr") == 0) {
|
||||||
|
show_human_brightness = 1;
|
||||||
|
} else if (strcmp(argv[i], "--adjust") == 0 || strcmp(argv[i], "-a") == 0) {
|
||||||
|
if (i + 1 < argc) {
|
||||||
|
adjust_direction = argv[++i];
|
||||||
|
} else {
|
||||||
|
print_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
} else if (strcmp(argv[i], "--set") == 0 || strcmp(argv[i], "-s") == 0) {
|
||||||
|
if (i + 1 < argc) {
|
||||||
|
set_brightness_value = atoi(argv[++i]);
|
||||||
|
if (set_brightness_value < 0 || set_brightness_value > 100) {
|
||||||
|
fprintf(stderr, "Error: Value for --set must be between 0 and 100\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
} else if (strcmp(argv[i], "--nodisplay") == 0 || strcmp(argv[i], "-nd") == 0) {
|
||||||
|
no_display = 1; // Set the no_display flag
|
||||||
|
} else {
|
||||||
|
print_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (show_machine_brightness) {
|
||||||
|
int brightness = get_current_brightness();
|
||||||
|
printf("Current brightness (machine-readable): %d\n", brightness);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (show_human_brightness) {
|
||||||
|
int brightness = get_current_brightness();
|
||||||
|
int max_brightness = get_max_brightness();
|
||||||
|
printf("Current brightness (human-readable): %d%%\n", (brightness * 100) / max_brightness);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (adjust_direction) {
|
||||||
|
adjust_brightness(adjust_direction, no_display);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set_brightness_value != -1) {
|
||||||
|
set_brightness(set_brightness_value, set_brightness_raw, no_display);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user