diff options
Diffstat (limited to 'src/luxmax.c')
-rw-r--r-- | src/luxmax.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/luxmax.c b/src/luxmax.c new file mode 100644 index 0000000..b30f02b --- /dev/null +++ b/src/luxmax.c @@ -0,0 +1,45 @@ +/* + * BSD Zero Clause License + * + * Copyright (c) 2022 Thomas Voss + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include <fcntl.h> +#include <stdio.h> +#include <unistd.h> + +#include "lux.h" + +int +luxmax(lux_t *disp) +{ + /* The maximum brightness shouldn't change, so we can cache it in the + * struct. + */ + if (disp->__max != -1) + return disp->__max; + + int fd = openat(disp->__dirfd, "max_brightness", O_RDONLY); + if (fd == -1) + return -1; + FILE *stream = fdopen(fd, "r"); + if (stream == NULL) { + close(fd); + return -1; + } + + fscanf(stream, "%d", &disp->__max); + fclose(stream); + return disp->__max; +} |