From 393857b067b5ef54c89ff4dcaa54084d43e765c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 30 May 2023 20:57:05 +0800 Subject: [PATCH] Brightness (Linux): print more useful display name instead of intel_backlight --- src/detection/brightness/brightness_linux.c | 23 ++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/detection/brightness/brightness_linux.c b/src/detection/brightness/brightness_linux.c index 97f3ea4f9..3222faeae 100644 --- a/src/detection/brightness/brightness_linux.c +++ b/src/detection/brightness/brightness_linux.c @@ -2,6 +2,7 @@ #include "common/io/io.h" #include +#include const char* ffDetectBrightness(FF_MAYBE_UNUSED FFlist* result) { @@ -12,13 +13,13 @@ const char* ffDetectBrightness(FF_MAYBE_UNUSED FFlist* result) if(dirp == NULL) return "Failed to open `/sys/class/backlight/`"; - FFstrbuf backlightDir; + FF_STRBUF_AUTO_DESTROY backlightDir; ffStrbufInitA(&backlightDir, 64); ffStrbufAppendS(&backlightDir, backlightDirPath); uint32_t backlightDirLength = backlightDir.length; - FFstrbuf buffer; + FF_STRBUF_AUTO_DESTROY buffer; ffStrbufInit(&buffer); struct dirent* entry; @@ -38,18 +39,26 @@ const char* ffDetectBrightness(FF_MAYBE_UNUSED FFlist* result) if(ffReadFileBuffer(backlightDir.chars, &buffer)) { FFBrightnessResult* display = (FFBrightnessResult*) ffListAdd(result); - ffStrbufInitS(&display->name, entry->d_name); + ffStrbufSubstrBeforeLastC(&backlightDir, '/'); + ffStrbufAppendS(&backlightDir, "/device"); + ffStrbufInitA(&display->name, PATH_MAX + 1); + if(realpath(backlightDir.chars, display->name.chars)) + { + ffStrbufRecalculateLength(&display->name); + ffStrbufSubstrAfterLastC(&display->name, '/'); + if(ffStrbufStartsWithS(&display->name, "card") && isdigit(display->name.chars[4])) + ffStrbufSubstrAfterFirstC(&display->name, '-'); + } + else + ffStrbufInitS(&display->name, entry->d_name); double maxBrightness = ffStrbufToDouble(&buffer); display->value = (float) (actualBrightness * 100 / maxBrightness); } - - break; } + ffStrbufSubstrBefore(&backlightDir, backlightDirLength); } closedir(dirp); - ffStrbufDestroy(&backlightDir); - ffStrbufDestroy(&buffer); return NULL; }