Temps (Linux): simplify

This commit is contained in:
李通洲
2024-09-24 01:42:00 +00:00
parent 87d32466f6
commit b4325ff205
3 changed files with 30 additions and 56 deletions
+1 -17
View File
@@ -281,22 +281,6 @@ static bool detectFrequency(FFCPUResult* cpu, const FFCPUOptions* options)
return true;
}
static double detectCPUTemp(void)
{
const FFlist* tempsResult = ffDetectTemps();
FF_LIST_FOR_EACH(FFTempValue, value, *tempsResult)
{
if(
ffStrbufFirstIndexS(&value->name, "cpu") < value->name.length ||
ffStrbufEqualS(&value->name, "k10temp") ||
ffStrbufEqualS(&value->name, "coretemp")
) return value->value;
}
return FF_CPU_TEMP_UNSET;
}
FF_MAYBE_UNUSED static void parseIsa(FFstrbuf* cpuIsa)
{
// Always use the last part of the ISA string. Ref: #590 #1204
@@ -374,7 +358,7 @@ const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
if(cpuinfo == NULL)
return "fopen(\"/proc/cpuinfo\", \"r\") failed";
cpu->temperature = options->temp ? detectCPUTemp() : FF_CPU_TEMP_UNSET;
cpu->temperature = options->temp ? ffDetectCPUTemp() : FF_CPU_TEMP_UNSET;
FF_STRBUF_AUTO_DESTROY physicalCoresBuffer = ffStrbufCreate();
FF_STRBUF_AUTO_DESTROY cpuMHz = ffStrbufCreate();
+28 -32
View File
@@ -1,61 +1,61 @@
#include "fastfetch.h"
#include "common/io/io.h"
#include "common/thread.h"
#include "temps_linux.h"
#include <string.h>
#include <dirent.h>
static bool parseHwmonDir(FFstrbuf* dir, FFTempValue* value)
static double parseHwmonDir(FFstrbuf* dir, FFstrbuf* buffer)
{
//https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
uint32_t dirLength = dir->length;
ffStrbufAppendS(dir, "temp1_input");
FF_STRBUF_AUTO_DESTROY valueBuffer = ffStrbufCreate();
if(!ffReadFileBuffer(dir->chars, &valueBuffer))
if(!ffReadFileBuffer(dir->chars, buffer))
{
// Some badly implemented system put temp file in /hwmonN/device
ffStrbufSubstrBefore(dir, dirLength);
ffStrbufAppendS(dir, "/device");
ffStrbufAppendS(dir, "device/");
dirLength = dir->length;
ffStrbufAppendS(dir, "temp1_input");
if(!ffReadFileBuffer(dir->chars, &valueBuffer))
return false;
if(!ffReadFileBuffer(dir->chars, buffer))
return 0.0/0.0;
}
ffStrbufSubstrBefore(dir, dirLength);
value->value = ffStrbufToDouble(&valueBuffer) / 1000; // valueBuffer is millidegree Celsius
double value = ffStrbufToDouble(buffer);// millidegree Celsius
if(value->value != value->value)
return false;
if(value != value)
return 0.0/0.0;
ffStrbufAppendS(dir, "name");
ffReadFileBuffer(dir->chars, &value->name);
ffStrbufTrimRightSpace(&value->name);
ffStrbufSubstrBefore(dir, dirLength);
if (!ffReadFileBuffer(dir->chars, buffer))
return 0.0/0.0;
return true;
ffStrbufTrimRightSpace(buffer);
if(
ffStrbufContainS(buffer, "cpu") ||
ffStrbufEqualS(buffer, "k10temp") || // AMD
ffStrbufEqualS(buffer, "coretemp") // Intel
) return value / 1000.;
return false;
}
const FFlist* ffDetectTemps(void)
double ffDetectCPUTemp(void)
{
static FFlist result;
if(result.elementSize > 0)
return &result;
ffListInitA(&result, sizeof(FFTempValue), 16);
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateA(64);
ffStrbufAppendS(&baseDir, "/sys/class/hwmon/");
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
uint32_t baseDirLength = baseDir.length;
FF_AUTO_CLOSE_DIR DIR* dirp = opendir(baseDir.chars);
if(dirp == NULL)
return &result;
return 0.0/0.0;
struct dirent* entry;
while((entry = readdir(dirp)) != NULL)
@@ -66,16 +66,12 @@ const FFlist* ffDetectTemps(void)
ffStrbufAppendS(&baseDir, entry->d_name);
ffStrbufAppendC(&baseDir, '/');
FFTempValue* temp = ffListAdd(&result);
ffStrbufInit(&temp->name);
if(!parseHwmonDir(&baseDir, temp))
{
ffStrbufDestroy(&temp->name);
--result.length;
}
double result = parseHwmonDir(&baseDir, &buffer);
if (result == result)
return result;
ffStrbufSubstrBefore(&baseDir, baseDirLength);
}
return &result;
return 0.0/0.0;
}
+1 -7
View File
@@ -2,10 +2,4 @@
#include "fastfetch.h"
typedef struct FFTempValue
{
FFstrbuf name;
double value;
} FFTempValue;
const FFlist* /* List of FFTempValue */ ffDetectTemps();
double ffDetectCPUTemp(void);