diff --git a/CHANGELOG.md b/CHANGELOG.md index 318ab09d3f..8f3160625b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Features: * Improve performance of detecting rpm and pkg package count (Packages, Linux / FreeBSD) +* Support Apple M3X temperature detection (CPU / GPU, macOS) # 2.3.4 diff --git a/src/detection/cpu/cpu_apple.c b/src/detection/cpu/cpu_apple.c index 418ab21651..e75dbc1c88 100644 --- a/src/detection/cpu/cpu_apple.c +++ b/src/detection/cpu/cpu_apple.c @@ -7,10 +7,16 @@ static double detectCpuTemp(const FFstrbuf* cpuName) double result = 0; const char* error = NULL; - if(ffStrbufStartsWithS(cpuName, "Apple M1")) - error = ffDetectCoreTemps(FF_TEMP_CPU_M1X, &result); - else if(ffStrbufStartsWithS(cpuName, "Apple M2")) - error = ffDetectCoreTemps(FF_TEMP_CPU_M2X, &result); + if (ffStrbufStartsWithS(cpuName, "Apple M")) + { + switch (strtol(cpuName->chars + strlen("Apple M"), NULL, 10)) + { + case 1: error = ffDetectCoreTemps(FF_TEMP_CPU_M1X, &result); break; + case 2: error = ffDetectCoreTemps(FF_TEMP_CPU_M2X, &result); break; + case 3: error = ffDetectCoreTemps(FF_TEMP_CPU_M3X, &result); break; + default: error = "Unsupported Apple Silicon CPU"; + } + } else // PPC? error = ffDetectCoreTemps(FF_TEMP_CPU_X64, &result); diff --git a/src/detection/gpu/gpu_apple.c b/src/detection/gpu/gpu_apple.c index 616a62cc99..bb734596d2 100644 --- a/src/detection/gpu/gpu_apple.c +++ b/src/detection/gpu/gpu_apple.c @@ -9,20 +9,26 @@ static double detectGpuTemp(const FFstrbuf* gpuName) { double result = 0; - const char* error; + const char* error = NULL; - if(ffStrbufStartsWithS(gpuName, "Apple M1")) - error = ffDetectCoreTemps(FF_TEMP_GPU_M1X, &result); - else if(ffStrbufStartsWithS(gpuName, "Apple M2")) - error = ffDetectCoreTemps(FF_TEMP_GPU_M2X, &result); - else if(ffStrbufStartsWithS(gpuName, "Intel")) + if (ffStrbufStartsWithS(gpuName, "Apple M")) + { + switch (strtol(gpuName->chars + strlen("Apple M"), NULL, 10)) + { + case 1: error = ffDetectCoreTemps(FF_TEMP_GPU_M1X, &result); break; + case 2: error = ffDetectCoreTemps(FF_TEMP_GPU_M2X, &result); break; + case 3: error = ffDetectCoreTemps(FF_TEMP_GPU_M3X, &result); break; + default: error = "Unsupported Apple Silicon GPU"; + } + } + else if (ffStrbufStartsWithS(gpuName, "Intel")) error = ffDetectCoreTemps(FF_TEMP_GPU_INTEL, &result); - else if(ffStrbufStartsWithS(gpuName, "Radeon") || ffStrbufStartsWithS(gpuName, "AMD")) + else if (ffStrbufStartsWithS(gpuName, "Radeon") || ffStrbufStartsWithS(gpuName, "AMD")) error = ffDetectCoreTemps(FF_TEMP_GPU_AMD, &result); else error = ffDetectCoreTemps(FF_TEMP_GPU_UNKNOWN, &result); - if(error) + if (error) return FF_GPU_TEMP_UNSET; return result; diff --git a/src/detection/temps/temps_apple.c b/src/detection/temps/temps_apple.c index 7054a3ed33..b274c49e0e 100644 --- a/src/detection/temps/temps_apple.c +++ b/src/detection/temps/temps_apple.c @@ -333,6 +333,25 @@ const char *ffDetectCoreTemps(enum FFTempType type, double *result) count += detectTemp(conn, "Tp09", result); // CPU core 8 break; + case FF_TEMP_CPU_M3X: + count += detectTemp(conn, "Te05", result); // CPU efficiency core 1 + count += detectTemp(conn, "Te0L", result); // CPU efficiency core 2 + count += detectTemp(conn, "Te0P", result); // CPU efficiency core 3 + count += detectTemp(conn, "Te0S", result); // CPU efficiency core 4 + count += detectTemp(conn, "Tf04", result); // CPU performance core 1 + count += detectTemp(conn, "Tf09", result); // CPU performance core 2 + count += detectTemp(conn, "Tf0A", result); // CPU performance core 3 + count += detectTemp(conn, "Tf0B", result); // CPU performance core 4 + count += detectTemp(conn, "Tf0D", result); // CPU performance core 5 + count += detectTemp(conn, "Tf0E", result); // CPU performance core 6 + count += detectTemp(conn, "Tf44", result); // CPU performance core 7 + count += detectTemp(conn, "Tf49", result); // CPU performance core 8 + count += detectTemp(conn, "Tf4A", result); // CPU performance core 9 + count += detectTemp(conn, "Tf4B", result); // CPU performance core 10 + count += detectTemp(conn, "Tf4D", result); // CPU performance core 11 + count += detectTemp(conn, "Tf4E", result); // CPU performance core 12 + break; + case FF_TEMP_GPU_INTEL: count += detectTemp(conn, "TCGC", result); // GPU Intel Graphics goto gpu_unknown; @@ -359,12 +378,27 @@ const char *ffDetectCoreTemps(enum FFTempType type, double *result) count += detectTemp(conn, "Tg0j", result); // GPU 2 break; + case FF_TEMP_GPU_M3X: + count += detectTemp(conn, "Tf14", result); // GPU 1 + count += detectTemp(conn, "Tf18", result); // GPU 2 + count += detectTemp(conn, "Tf19", result); // GPU 3 + count += detectTemp(conn, "Tf1A", result); // GPU 4 + count += detectTemp(conn, "Tf24", result); // GPU 5 + count += detectTemp(conn, "Tf28", result); // GPU 6 + count += detectTemp(conn, "Tf29", result); // GPU 7 + count += detectTemp(conn, "Tf2A", result); // GPU 8 + break; + case FF_TEMP_BATTERY: count += detectTemp(conn, "TB1T", result); // Battery + count += detectTemp(conn, "TB2T", result); // Battery break; case FF_TEMP_MEMORY: - count += detectTemp(conn, "Tm02", result); // Memory + count += detectTemp(conn, "Tm02", result); // Memory 1 + count += detectTemp(conn, "Tm06", result); // Memory 2 + count += detectTemp(conn, "Tm08", result); // Memory 3 + count += detectTemp(conn, "Tm09", result); // Memory 4 break; } diff --git a/src/detection/temps/temps_apple.h b/src/detection/temps/temps_apple.h index 7d340ba221..ccf914311f 100644 --- a/src/detection/temps/temps_apple.h +++ b/src/detection/temps/temps_apple.h @@ -15,12 +15,14 @@ enum FFTempType FF_TEMP_CPU_X64, FF_TEMP_CPU_M1X, FF_TEMP_CPU_M2X, + FF_TEMP_CPU_M3X, FF_TEMP_GPU_INTEL, FF_TEMP_GPU_AMD, FF_TEMP_GPU_UNKNOWN, FF_TEMP_GPU_M1X, FF_TEMP_GPU_M2X, + FF_TEMP_GPU_M3X, FF_TEMP_BATTERY,