From 05108977e83806d46c7cc2d71aa61aeeb5ab012f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 14 Oct 2025 14:44:16 +0800 Subject: [PATCH] CPU (Android): improves Android SoC vendor and model detection --- src/detection/cpu/cpu_linux.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/detection/cpu/cpu_linux.c b/src/detection/cpu/cpu_linux.c index 5ee6dcdd3..498f04896 100644 --- a/src/detection/cpu/cpu_linux.c +++ b/src/detection/cpu/cpu_linux.c @@ -145,6 +145,7 @@ static void detectQualcomm(FFCPUResult* cpu) { // https://en.wikipedia.org/wiki/List_of_Qualcomm_Snapdragon_systems_on_chips + assert(cpu->name.length >= 2); uint32_t code = (uint32_t) strtoul(cpu->name.chars + 2, NULL, 10); const char* name = NULL; @@ -189,6 +190,7 @@ static void detectMediaTek(FFCPUResult* cpu) { // https://en.wikipedia.org/wiki/List_of_MediaTek_systems_on_chips + assert(cpu->name.length >= 2); uint32_t code = (uint32_t) strtoul(cpu->name.chars + 2, NULL, 10); const char* name = NULL; @@ -225,18 +227,26 @@ static void detectAndroid(FFCPUResult* cpu) { if (ffSettingsGetAndroidProperty("ro.soc.model", &cpu->name)) ffStrbufClear(&cpu->vendor); // We usually detect the vendor of CPU core as ARM, but instead we want the vendor of SOC - else if(ffSettingsGetAndroidProperty("ro.mediatek.platform", &cpu->name)) - ffStrbufSetStatic(&cpu->vendor, "MTK"); } if (cpu->vendor.length == 0) { if (!ffSettingsGetAndroidProperty("ro.soc.manufacturer", &cpu->vendor)) - ffSettingsGetAndroidProperty("ro.product.product.manufacturer", &cpu->vendor); + if (!ffSettingsGetAndroidProperty("ro.product.product.manufacturer", &cpu->vendor)) + if (!ffSettingsGetAndroidProperty("ro.product.vendor.manufacturer", &cpu->vendor)) + if(ffSettingsGetAndroidProperty("ro.mediatek.platform", &cpu->name)) + ffStrbufSetStatic(&cpu->vendor, "MediaTek"); } - if (ffStrbufEqualS(&cpu->vendor, "QTI") && ffStrbufStartsWithS(&cpu->name, "SM")) + if (ffStrbufEqualS(&cpu->vendor, "QTI")) + ffStrbufSetStatic(&cpu->vendor, "Qualcomm"); + else if (ffStrbufIgnCaseEqualS(&cpu->vendor, "MediaTek")) // sometimes "Mediatek" + ffStrbufSetStatic(&cpu->vendor, "MediaTek"); + else if (cpu->vendor.length > 0) + cpu->vendor.chars[0] = (char) toupper(cpu->vendor.chars[0]); + + if (ffStrbufEqualS(&cpu->vendor, "Qualcomm") && ffStrbufStartsWithS(&cpu->name, "SM")) detectQualcomm(cpu); - else if (ffStrbufEqualS(&cpu->vendor, "MTK") && ffStrbufStartsWithS(&cpu->name, "MT")) + else if (ffStrbufEqualS(&cpu->vendor, "MediaTek") && ffStrbufStartsWithS(&cpu->name, "MT")) detectMediaTek(cpu); } #endif