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;
                }
        }

Reply via email to