Hi,
here comes the second part of the series for generic keyboard backlight
support.
Please find below the userland part which adds a backlight variable to
wsconsctl(8).
I have chosen to use the percentage format, so it looks like this:
$ doas wsconsctl keyboard.backlight=80
keyboard.backlight -> 80.00%
Comments, OK?
Thanks,
Regards,
Joerg
Index: keyboard.c
===================================================================
RCS file: /cvs/src/sbin/wsconsctl/keyboard.c,v
retrieving revision 1.12
diff -u -p -r1.12 keyboard.c
--- keyboard.c 21 Mar 2013 06:04:05 -0000 1.12
+++ keyboard.c 7 Dec 2015 21:03:22 -0000
@@ -50,6 +50,7 @@ static struct wskbd_keyrepeat_data repea
static struct wskbd_keyrepeat_data dfrepeat;
static int ledstate;
static kbd_t kbdencoding;
+static struct field_pc backlight;
struct field keyboard_field_tab[] = {
{ "type", &kbtype, FMT_KBDTYPE, FLG_RDONLY },
@@ -66,12 +67,15 @@ struct field keyboard_field_tab[] = {
{ "repeat.deln.default", &dfrepeat.delN, FMT_UINT, FLG_MODIFY },
{ "ledstate", &ledstate, FMT_UINT, 0 },
{ "encoding", &kbdencoding, FMT_KBDENC, FLG_MODIFY },
+ { "backlight", &backlight, FMT_PC,
FLG_MODIFY|FLG_INIT },
{ NULL }
};
void
keyboard_get_values(int fd)
{
+ struct wskbd_backlight kbl;
+
if (field_by_value(keyboard_field_tab, &kbtype)->flags & FLG_GET)
if (ioctl(fd, WSKBDIO_GTYPE, &kbtype) < 0)
warn("WSKBDIO_GTYPE");
@@ -131,11 +135,24 @@ keyboard_get_values(int fd)
if (field_by_value(keyboard_field_tab, &kbdencoding)->flags & FLG_GET)
if (ioctl(fd, WSKBDIO_GETENCODING, &kbdencoding) < 0)
warn("WSKBDIO_GETENCODING");
+
+ if (field_by_value(keyboard_field_tab, &backlight)->flags & FLG_GET) {
+ if (ioctl(fd, WSKBDIO_GETBACKLIGHT, &kbl) < 0)
+ warn("WSKBDIO_GETBACKLIGHT");
+ else {
+ backlight.min = kbl.min;
+ backlight.cur = kbl.curval;
+ backlight.max = kbl.max;
+ }
+ }
+
}
int
keyboard_put_values(int fd)
{
+ struct wskbd_backlight kbl;
+
bell.which = 0;
if (field_by_value(keyboard_field_tab, &bell.pitch)->flags & FLG_SET)
bell.which |= WSKBD_BELL_DOPITCH;
@@ -200,6 +217,16 @@ keyboard_put_values(int fd)
if (field_by_value(keyboard_field_tab, &kbdencoding)->flags & FLG_SET) {
if (ioctl(fd, WSKBDIO_SETENCODING, &kbdencoding) < 0) {
warn("WSKBDIO_SETENCODING");
+ return 1;
+ }
+ }
+
+ if (field_by_value(keyboard_field_tab, &backlight)->flags & FLG_SET) {
+ kbl.min = backlight.min;
+ kbl.curval = backlight.cur;
+ kbl.max = backlight.max;
+ if (ioctl(fd, WSKBDIO_SETBACKLIGHT, &kbl) < 0) {
+ warn("WSKBDIO_SETBACKLIGHT");
return 1;
}
}