slstatus-backlight-20240127-f68f492.diff - sites - public wiki contents of suck… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
slstatus-backlight-20240127-f68f492.diff (4098B) | |
--- | |
1 From aadea01ca9cd99932500f4988d7c57f6bc5fa6c5 Mon Sep 17 00:00:00 2001 | |
2 From: Son Phan Trung <[email protected]> | |
3 Date: Sat, 27 Jan 2024 21:10:41 +0700 | |
4 Subject: [PATCH] Add backlight module for slstatus. | |
5 | |
6 FreeBSD support is added, with these things to keep in mind: | |
7 - Device names are numbered compared to Linux (e.g. "intel_backlight0" i… | |
8 - Max number is hardcoded to 100. | |
9 --- | |
10 Makefile | 1 + | |
11 components/backlight.c | 86 ++++++++++++++++++++++++++++++++++++++++++ | |
12 config.def.h | 3 ++ | |
13 slstatus.h | 3 ++ | |
14 4 files changed, 93 insertions(+) | |
15 create mode 100644 components/backlight.c | |
16 | |
17 diff --git a/Makefile b/Makefile | |
18 index 7a18274..a7eacfa 100644 | |
19 --- a/Makefile | |
20 +++ b/Makefile | |
21 @@ -6,6 +6,7 @@ include config.mk | |
22 | |
23 REQ = util | |
24 COM =\ | |
25 + components/backlight\ | |
26 components/battery\ | |
27 components/cat\ | |
28 components/cpu\ | |
29 diff --git a/components/backlight.c b/components/backlight.c | |
30 new file mode 100644 | |
31 index 0000000..46240f6 | |
32 --- /dev/null | |
33 +++ b/components/backlight.c | |
34 @@ -0,0 +1,86 @@ | |
35 +/* See LICENSE file for copyright and license details. */ | |
36 + | |
37 +#include <stddef.h> | |
38 + | |
39 +#include "../util.h" | |
40 + | |
41 +#if defined(__linux__) | |
42 + #include <limits.h> | |
43 + | |
44 + #define BRIGHTNESS_MAX "/sys/class/backlight/%s/max_brightness" | |
45 + #define BRIGHTNESS_CUR "/sys/class/backlight/%s/brightness" | |
46 + | |
47 + const char * | |
48 + backlight_perc(const char *card) | |
49 + { | |
50 + char path[PATH_MAX]; | |
51 + int max, cur; | |
52 + | |
53 + if (esnprintf(path, sizeof (path), BRIGHTNESS_MAX, card… | |
54 + pscanf(path, "%d", &max) != 1) { | |
55 + return NULL; | |
56 + } | |
57 + | |
58 + if (esnprintf(path, sizeof (path), BRIGHTNESS_CUR, card… | |
59 + pscanf(path, "%d", &cur) != 1) { | |
60 + return NULL; | |
61 + } | |
62 + | |
63 + if (max == 0) { | |
64 + return NULL; | |
65 + } | |
66 + | |
67 + return bprintf("%d%%", cur * 100 / max); | |
68 + } | |
69 +#elif defined(__OpenBSD__) | |
70 + #include <fcntl.h> | |
71 + #include <sys/ioctl.h> | |
72 + #include <sys/time.h> | |
73 + #include <dev/wscons/wsconsio.h> | |
74 + | |
75 + const char * | |
76 + backlight_perc(const char *unused) | |
77 + { | |
78 + int fd, err; | |
79 + struct wsdisplay_param wsd_param = { | |
80 + .param = WSDISPLAYIO_PARAM_BRIGHTNESS | |
81 + }; | |
82 + | |
83 + if ((fd = open("/dev/ttyC0", O_RDONLY)) < 0) { | |
84 + warn("could not open /dev/ttyC0"); | |
85 + return NULL; | |
86 + } | |
87 + if ((err = ioctl(fd, WSDISPLAYIO_GETPARAM, &wsd_param))… | |
88 + warn("ioctl 'WSDISPLAYIO_GETPARAM' failed"); | |
89 + return NULL; | |
90 + } | |
91 + return bprintf("%d", wsd_param.curval * 100 / wsd_param… | |
92 + } | |
93 +#elif defined(__FreeBSD__) | |
94 + #include <fcntl.h> | |
95 + #include <stdio.h> | |
96 + #include <sys/ioctl.h> | |
97 + #include <sys/backlight.h> | |
98 + | |
99 + #define FBSD_BACKLIGHT_DEV "/dev/backlight/%s" | |
100 + | |
101 + const char * | |
102 + backlight_perc(const char *card) | |
103 + { | |
104 + char buf[256]; | |
105 + struct backlight_props props; | |
106 + int fd; | |
107 + | |
108 + snprintf(buf, sizeof(buf), FBSD_BACKLIGHT_DEV, card); | |
109 + if ((fd = open(buf, O_RDWR)) == -1) { | |
110 + warn("could not open %s", card); | |
111 + return NULL; | |
112 + } | |
113 + if (ioctl(fd, BACKLIGHTGETSTATUS, &props) == -1){ | |
114 + warn("Cannot query the backlight device"); | |
115 + return NULL; | |
116 + } | |
117 + | |
118 + return bprintf("%d", props.brightness); | |
119 + } | |
120 +#endif | |
121 diff --git a/config.def.h b/config.def.h | |
122 index d805331..d56051d 100644 | |
123 --- a/config.def.h | |
124 +++ b/config.def.h | |
125 @@ -12,6 +12,9 @@ static const char unknown_str[] = "n/a"; | |
126 /* | |
127 * function description argument (exampl… | |
128 * | |
129 + * backlight_perc backlight percentage device name | |
130 + * (intel_backlight… | |
131 + * NULL on OpenBSD | |
132 * battery_perc battery percentage battery name (BA… | |
133 * NULL on OpenBSD/… | |
134 * battery_remaining battery remaining HH:MM battery name (BA… | |
135 diff --git a/slstatus.h b/slstatus.h | |
136 index 8ef5874..dc7e2d0 100644 | |
137 --- a/slstatus.h | |
138 +++ b/slstatus.h | |
139 @@ -1,5 +1,8 @@ | |
140 /* See LICENSE file for copyright and license details. */ | |
141 | |
142 +/* backlight */ | |
143 +const char *backlight_perc(const char *); | |
144 + | |
145 /* battery */ | |
146 const char *battery_perc(const char *); | |
147 const char *battery_remaining(const char *); | |
148 -- | |
149 2.42.0 | |
150 |