Mercurial > backlight
annotate backlight.c @ 16:0d923f0155dd
doc: improve documentation
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 11 Oct 2019 13:12:26 +0200 |
parents | 282ec7c30c04 |
children | 37d1b7dd73ee |
rev | line source |
---|---|
7 | 1 /* |
2 * main.c -- adjust laptop backlight using ACPI | |
3 * | |
4 * Copyright (c) 2010-2019 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include <errno.h> | |
20 #include <stdarg.h> | |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 | |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
25 /* |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
26 * Functions to implement for your system: |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
27 * |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
28 * All of these functions are allowed to exit on failures. |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
29 */ |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
30 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
31 /* Increase to the nearest upper level */ |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
32 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
33 increase(void); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
34 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
35 /* Decrease to the nearest lower level */ |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
36 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
37 decrease(void); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
38 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
39 /* Set the level explicitly to the nearest value */ |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
40 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
41 set(unsigned int); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
42 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
43 /* Get the current value */ |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
44 static unsigned int |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
45 get(void); |
7 | 46 |
47 static void | |
48 usage(const char *name) | |
49 { | |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
50 fprintf(stderr, "usage: %s decrease\n", name); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
51 fprintf(stderr, " %s get\n", name); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
52 fprintf(stderr, " %s increase\n", name); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
53 fprintf(stderr, " %s set percentage\n", name); |
7 | 54 exit(1); |
55 } | |
56 | |
57 static void | |
58 die(const char *fmt, ...) | |
59 { | |
60 va_list ap; | |
61 | |
62 va_start(ap, fmt); | |
63 fprintf(stderr, "abort: "); | |
64 vfprintf(stderr, fmt, ap); | |
65 va_end(ap); | |
66 | |
67 exit(1); | |
68 } | |
69 | |
70 /* {{{ Support for FreeBSD */ | |
71 | |
72 #if defined(__FreeBSD__) | |
73 | |
74 #include <sys/types.h> | |
75 #include <sys/sysctl.h> | |
76 | |
77 static int | |
78 set(enum action type) | |
79 { | |
80 int current, next = 0, i; | |
81 int msg[100]; | |
82 size_t len, nextlen; | |
83 | |
84 /* First, get all values availables */ | |
85 len = sizeof (msg); | |
86 | |
87 if (sysctlbyname("hw.acpi.video.lcd0.levels", msg, &len, NULL, 0) == -1) | |
88 die("sysctl: %s\n", strerror(errno)); | |
89 | |
90 /* Get the current value */ | |
91 len = sizeof (current); | |
92 | |
93 if (sysctlbyname("hw.acpi.video.lcd0.brightness", ¤t, &len, NULL, 0) == -1) | |
94 die("sysctl: %s\n", strerror(errno)); | |
95 | |
96 /* First find the index of 0 */ | |
97 for (i = 0; msg[i] != 0; ++i) | |
98 continue; | |
99 | |
100 /* Find the current value index in msg */ | |
101 for (; msg[i] != current; ++i) | |
102 continue; | |
103 | |
104 if (type == Up) { | |
105 if (msg[i] >= 100) | |
106 return msg[i]; | |
107 | |
108 next = msg[i + 1]; | |
109 } else { | |
110 if (msg[i] == 0) | |
111 return 0; | |
112 | |
113 next = msg[i - 1]; | |
114 } | |
115 | |
116 nextlen = sizeof (next); | |
117 | |
118 if (sysctlbyname("hw.acpi.video.lcd0.brightness", ¤t, &len, &next, nextlen) == -1) | |
119 die("sysctl: %s\n", strerror(errno)); | |
120 | |
121 return next; | |
122 } | |
123 | |
124 /* }}} */ | |
125 | |
126 /* {{{ Support for Linux */ | |
127 | |
9
bd47bd0c977a
backlight: fix for FreeBSD and pet a warning
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
128 #elif defined(__linux__) |
7 | 129 |
130 #include <sys/types.h> | |
131 #include <sys/stat.h> | |
11
637ef49be6c9
backlight: use _XOPEN_SOURCE=700
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
132 #include <dirent.h> |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
133 #include <fcntl.h> |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
134 #include <unistd.h> |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
135 |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
136 #define SYS_PATH "/sys/class/backlight" |
7 | 137 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
138 static unsigned int |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
139 read_int(int dfd, const char *file) |
7 | 140 { |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
141 char buf[32] = {0}; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
142 int fd; |
7 | 143 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
144 if ((fd = openat(dfd, file, O_RDONLY)) < 0) |
7 | 145 die("open: %s\n", strerror(errno)); |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
146 if (read(fd, &buf[0], sizeof (buf) - 1) < 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
147 die("read: %s\n", strerror(errno)); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
148 |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
149 close(fd); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
150 |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
151 return atoi(buf); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
152 } |
7 | 153 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
154 static int |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
155 write_int(int dfd, const char *file, unsigned int value) |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
156 { |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
157 char buf[32] = {0}; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
158 int length; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
159 int fd; |
7 | 160 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
161 if ((fd = openat(dfd, file, O_WRONLY)) < 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
162 die("open: %s\n", strerror(errno)); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
163 if ((length = snprintf(buf, sizeof (buf), "%d\n", value)) < 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
164 die("snprintf: %s\n", strerror(errno)); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
165 if (write(fd, buf, length) != length) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
166 die("write: %s\n", strerror(errno)); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
167 |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
168 /* Re-read in case kernel change the value. */ |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
169 return read_int(dfd, "brightness"); |
7 | 170 } |
171 | |
172 static int | |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
173 try_adaptor(int parent_fd, const char *path) |
7 | 174 { |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
175 int dfd; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
176 struct stat st; |
7 | 177 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
178 if ((dfd = openat(parent_fd, path, O_RDONLY)) < 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
179 return -1; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
180 if (fstatat(dfd, "brightness", &st, 0) < 0) { |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
181 close(dfd); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
182 return -1; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
183 } |
7 | 184 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
185 return dfd; |
7 | 186 } |
187 | |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
188 static int |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
189 find_adaptor(void) |
7 | 190 { |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
191 int dfd, adaptorfd = -1; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
192 DIR *dirp; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
193 struct dirent *dirent; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
194 |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
195 if ((dfd = open(SYS_PATH, O_RDONLY)) < 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
196 die("open: %s: %s\n", SYS_PATH, strerror(errno)); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
197 if (!(dirp = fdopendir(dfd))) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
198 die("fdopendir: %s: %s\n", SYS_PATH, strerror(errno)); |
7 | 199 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
200 while ((dirent = readdir(dirp))) { |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
201 if (strcmp(dirent->d_name, ".") == 0 || |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
202 strcmp(dirent->d_name, "..") == 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
203 continue; |
7 | 204 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
205 if ((adaptorfd = try_adaptor(dfd, dirent->d_name)) >= 0) |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
206 break; |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
207 } |
7 | 208 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
209 closedir(dirp); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
210 close(dfd); |
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
211 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
212 if (adaptorfd < 0) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
213 die("could not find card adaptor\n"); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
214 |
10
2b12d8bee90d
backlight: search for card in Linux
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
215 return adaptorfd; |
7 | 216 } |
217 | |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
218 static unsigned int |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
219 downscale(int dfd, unsigned int value) |
7 | 220 { |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
221 return value * 100 / read_int(dfd, "max_brightness"); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
222 } |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
223 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
224 static unsigned int |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
225 upscale(int dfd, unsigned int value) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
226 { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
227 return value * read_int(dfd, "max_brightness") / 100; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
228 } |
7 | 229 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
230 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
231 set(unsigned int percent) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
232 { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
233 int dfd = find_adaptor(); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
234 unsigned int value = upscale(dfd, percent); |
7 | 235 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
236 write_int(dfd, "brightness", value); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
237 } |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
238 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
239 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
240 increase(void) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
241 { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
242 unsigned int value = get(); |
7 | 243 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
244 if (value + 2 > 100) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
245 value = 100; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
246 else |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
247 value += 2; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
248 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
249 set(value); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
250 } |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
251 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
252 static void |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
253 decrease(void) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
254 { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
255 unsigned int value = get(); |
7 | 256 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
257 if ((int)value - 2 < 0) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
258 value = 0; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
259 else |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
260 value -= 2; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
261 |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
262 set(value); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
263 } |
7 | 264 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
265 static unsigned int |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
266 get(void) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
267 { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
268 int dfd = find_adaptor(); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
269 int value = read_int(dfd, "brightness"); |
7 | 270 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
271 return downscale(dfd, value); |
7 | 272 } |
273 | |
16
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
274 /* }}} */ |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
275 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
276 /* {{{ Non supported shims */ |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
277 |
7 | 278 #else |
279 | |
16
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
280 static void |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
281 notsupported(void) |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
282 { |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
283 die("backlight is not supported on this system\n"); |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
284 } |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
285 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
286 static void |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
287 increase(void) |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
288 { |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
289 notsupported(); |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
290 } |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
291 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
292 static void |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
293 decrease(void) |
7 | 294 { |
16
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
295 notsupported(); |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
296 } |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
297 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
298 static void |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
299 set(unsigned int v) |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
300 { |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
301 (void)v; |
7 | 302 |
16
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
303 notsupported(); |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
304 } |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
305 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
306 static unsigned int |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
307 get(void) |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
308 { |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
309 notsupported(); |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
310 |
0d923f0155dd
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
15
diff
changeset
|
311 return -1; |
7 | 312 } |
313 | |
314 #endif | |
315 | |
316 /* }}} */ | |
317 | |
318 int | |
319 main(int argc, char *argv[]) | |
320 { | |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
321 -- argc; |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
322 ++ argv; |
7 | 323 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
324 if (argc < 1) |
7 | 325 usage(argv[0]); |
326 | |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
327 if (strcmp(argv[0], "get") == 0) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
328 printf("%d\n", get()); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
329 else if (strcmp(argv[0], "set") == 0) { |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
330 if (argc != 2) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
331 usage(argv[0]); |
7 | 332 |
15
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
333 set(atoi(argv[1])); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
334 } else if (strcmp(argv[0], "increase") == 0) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
335 increase(); |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
336 else if (strcmp(argv[0], "decrease") == 0) |
282ec7c30c04
backlight: now supports more commands
David Demelier <markand@malikania.fr>
parents:
11
diff
changeset
|
337 decrease(); |
7 | 338 } |