From 3bd4694a521de0158364b09bffb1ee50e93b90c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 10 Aug 2023 10:12:25 +0800 Subject: [PATCH] Display (Linux): detect monitor name when using DRM --- .../displayserver/linux/displayserver_linux.c | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/detection/displayserver/linux/displayserver_linux.c b/src/detection/displayserver/linux/displayserver_linux.c index 13ffcf5e6..3c93d29c0 100644 --- a/src/detection/displayserver/linux/displayserver_linux.c +++ b/src/detection/displayserver/linux/displayserver_linux.c @@ -1,4 +1,6 @@ #include "displayserver_linux.h" +#include "common/io/io.h" +#include "util/edidHelper.h" #include "util/stringUtils.h" #include @@ -37,14 +39,25 @@ static void parseDRM(FFDisplayServerResult* result) int scanned = fscanf(modeFile, "%ux%u", &width, &height); if(scanned == 2 && width > 0 && height > 0) { - const char* plainName = entry->d_name; - if (ffStrStartsWith(plainName, "card")) + ffStrbufSubstrBefore(&drmDir, drmDirLength); + ffStrbufAppendS(&drmDir, entry->d_name); + ffStrbufAppendS(&drmDir, "/edid"); + + FF_STRBUF_AUTO_DESTROY name = ffStrbufCreate(); + uint8_t edidData[128]; + if(ffReadFileData(drmDir.chars, sizeof(edidData), edidData) == sizeof(edidData)) + ffEdidGetName(edidData, &name); + else { - const char* tmp = strchr(plainName + strlen("card"), '-'); - if (tmp) plainName = tmp + 1; + const char* plainName = entry->d_name; + if (ffStrStartsWith(plainName, "card")) + { + const char* tmp = strchr(plainName + strlen("card"), '-'); + if (tmp) plainName = tmp + 1; + } + ffStrbufAppendS(&name, plainName); } - FF_STRBUF_AUTO_DESTROY name = ffStrbufCreateS(plainName); ffdsAppendDisplay( result, width, height,