From d77a58570d010d6316c297f83170d373c8cc2034 Mon Sep 17 00:00:00 2001 From: wifiextender Date: Thu, 18 Aug 2016 21:12:07 +0200 Subject: [PATCH] Make get_fans available in FreeBSD --- README.md | 6 +++++- img/pic5.png | Bin 0 -> 6595 bytes src/freebsd_functions.c | 36 ++++++++++++++++++++++++++++++++++++ src/options.c | 4 ++-- src/prototypes/functions.h | 2 +- 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 img/pic5.png diff --git a/README.md b/README.md index 671ef29..fd0376f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ xmonad ![](img/pic2.png) +FreeBSD + +![](img/pic5.png) + Gather some system information and show it in this statusbar program, not tied to any Window Manager, terminal multiplexer, etc. Please note that the program won't detect fans connected via molex connetor(s) or external fan controller. Also I have not tested it with fan splitter(s) either. @@ -14,7 +18,7 @@ The program is smart enough to detect whether some of your fan(s) blades are spi If you compile your kernel from source code make sure to include your cpu and motherboard sensors as **modules** and not inlined. -Just an example if you use FreeBSD - acpi/aibs, coretemp/amdtemp. +**Just an example if you use FreeBSD - acpi/aibs, coretemp/amdtemp.** ![](img/cpu-temp.png) ![](img/mobo-temp.png) diff --git a/img/pic5.png b/img/pic5.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5a6d9b2683e77926dba47e2eb59b38dcadcfe6 GIT binary patch literal 6595 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 ByYc`4 literal 0 HcmV?d00001 diff --git a/src/freebsd_functions.c b/src/freebsd_functions.c index 05b1635..6933906 100644 --- a/src/freebsd_functions.c +++ b/src/freebsd_functions.c @@ -161,3 +161,39 @@ get_mobo_temp(char *str1) { temp2 / 100 : temp2 / 10)); /* > 9C || < 9C */ } } + + +void +get_fans(char *str1) { + u_int fan[3]; + char tempstr[VLA], buffer[VLA]; + char *all_fans = buffer; + uint_fast16_t x = 0, y = 0, z = 0, rpm[21]; + + memset(fan, 0, sizeof(fan)); + memset(rpm, 0, sizeof(rpm)); + size_t len = sizeof(fan); + + for (x = 0; x < 20; x++) { + FILL_ARR(tempstr, "%s"UFINT, "dev.aibs.0.fan.", x); + memset(fan, 0, sizeof(fan)); + if (0 != sysctlbyname(tempstr, &fan, &len, NULL, 0)) { + break; + } + rpm[x] = (uint_fast16_t)fan[0]; + } + + if (0 == rpm[0]) { /* no system fans at all */ + FILL_STR_ARR(1, str1, NOT_FOUND); + return; + } + + z = x; + for (x = 0; x < z; x++) { + if (0 < rpm[x]) + GLUE2(all_fans, UFINT" ", rpm[x]); + else + ++y; /* non-spinning | removed | failed fan */ + } + FILL_STR_ARR(1, str1, (y != x ? buffer : NOT_FOUND)); +} diff --git a/src/options.c b/src/options.c index 751f920..b0c8a00 100644 --- a/src/options.c +++ b/src/options.c @@ -159,6 +159,8 @@ parse_opt(int key, char *arg, struct argp_state *state) { NEW_LABEL('d', char mobo_temp[VLA], mobo_temp, FMT_TEMP); + NEW_LABEL('f', char fans[VLA], fans, FMT_FANS, FANS_STR); + NEW_LABEL('t', char taim[VLA], taim, FMT_TIME" ", TIME_STR); NEW_NET_LABEL('b', char net[VLA], net, 1, FMT_NET, NET_STR); @@ -181,8 +183,6 @@ parse_opt(int key, char *arg, struct argp_state *state) { NEW_ARG_LABEL('F', char ssd_model[VLA], ssd_model, FMT_KERN); - NEW_LABEL('f', char fans[VLA], fans, FMT_FANS, FANS_STR); - NEW_NET_LABEL('h', char nic_drv[VLA], nic_drv, 8, FMT_KERN); NEW_NET_LABEL('H', char nic_ver[VLA], nic_ver, 9, FMT_KERN); diff --git a/src/prototypes/functions.h b/src/prototypes/functions.h index cbcc4d7..6a17d1e 100644 --- a/src/prototypes/functions.h +++ b/src/prototypes/functions.h @@ -26,10 +26,10 @@ void get_loadavg(char *); void get_voltage(char *); void get_mobo(char *); void get_mobo_temp(char *); +void get_fans(char *); #if defined(__linux__) void get_ssd_model(char *, char *); -void get_fans(char *); void get_statio(char *, char *); void get_battery(char *); #endif -- 2.11.0