slstatus-backlight-20240127-f68f492.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slstatus-backlight-20240127-f68f492.diff (4098B)
       ---
            1 From aadea01ca9cd99932500f4988d7c57f6bc5fa6c5 Mon Sep 17 00:00:00 2001
            2 From: Son Phan Trung <phantrungson17@gmail.com>
            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" instead "intel_backlight).
            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) < 0 ||
           54 +                        pscanf(path, "%d", &max) != 1) {
           55 +                        return NULL;
           56 +                }
           57 +
           58 +                if (esnprintf(path, sizeof (path), BRIGHTNESS_CUR, card) < 0 ||
           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)) < 0) {
           88 +                        warn("ioctl 'WSDISPLAYIO_GETPARAM' failed");
           89 +                        return NULL;
           90 +                }
           91 +                return bprintf("%d", wsd_param.curval * 100 / wsd_param.max);
           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 (example)
          128   *
          129 + * backlight_perc      backlight percentage            device name
          130 + *                                                     (intel_backlight, numbered on FreeBSD)
          131 + *                                                     NULL on OpenBSD
          132   * battery_perc        battery percentage              battery name (BAT0)
          133   *                                                     NULL on OpenBSD/FreeBSD
          134   * battery_remaining   battery remaining HH:MM         battery name (BAT0)
          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