Chassis (Windows): add basic support

This commit is contained in:
李通洲
2023-06-22 17:32:01 +08:00
parent 291c43dd31
commit 5394d6da8a
4 changed files with 69 additions and 1 deletions
+2 -1
View File
@@ -250,6 +250,7 @@ set(LIBFASTFETCH_SRC
src/common/printing.c
src/common/properties.c
src/common/settings.c
src/detection/chassis/chassis.c
src/detection/cpu/cpu.c
src/detection/cpuusage/cpuusage.c
src/detection/datetime/datetime.c
@@ -530,7 +531,7 @@ elseif(WIN32)
src/detection/bluetooth/bluetooth_windows.c
src/detection/board/board_windows.c
src/detection/brightness/brightness_windows.cpp
src/detection/chassis/chassis_nosupport.c
src/detection/chassis/chassis_windows.c
src/detection/cpu/cpu_windows.c
src/detection/cpuusage/cpuusage_windows.c
src/detection/cursor/cursor_windows.c
+46
View File
@@ -0,0 +1,46 @@
#include "chassis.h"
const char* ffChassisTypeToString(uint32_t chassisType)
{
// https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdf
// 7.4.1 System Enclosure or Chassis Types
switch (chassisType)
{
case 0x01: return "Other";
case 0x02: return "Unknown";
case 0x03: return "Desktop";
case 0x04: return "Low Profile Desktop";
case 0x05: return "Pizza Box";
case 0x06: return "Mini Tower";
case 0x07: return "Tower";
case 0x08: return "Portable";
case 0x09: return "Laptop";
case 0x0A: return "Notebook";
case 0x0B: return "Hand Held";
case 0x0C: return "Docking Station";
case 0x0D: return "All in One";
case 0x0E: return "Sub Notebook";
case 0x0F: return "Space-saving";
case 0x10: return "Lunch Box";
case 0x11: return "Main Server Chassis";
case 0x12: return "Expansion Chassis";
case 0x13: return "SubChassis";
case 0x14: return "Bus Expansion Chassis";
case 0x15: return "Peripheral Chassis";
case 0x16: return "RAID Chassis";
case 0x17: return "Rack Mount Chassis";
case 0x18: return "Sealed-case PC";
case 0x19: return "Multi-system chassis";
case 0x1A: return "Compact PCI";
case 0x1B: return "Advanced TCA";
case 0x1C: return "Blade";
case 0x1E: return "Tablet";
case 0x1F: return "Convertible";
case 0x20: return "Detachable";
case 0x21: return "IoT Gateway";
case 0x22: return "Embedded PC";
case 0x23: return "Mini PC";
case 0x24: return "Stick PC";
default: return NULL;
}
}
+1
View File
@@ -13,5 +13,6 @@ typedef struct FFChassisResult
} FFChassisResult;
const char* ffDetectChassis(FFChassisResult* result);
const char* ffChassisTypeToString(uint32_t chassisType);
#endif
+20
View File
@@ -0,0 +1,20 @@
#include "chassis.h"
#include "util/windows/registry.h"
const char* ffDetectChassis(FFChassisResult* result)
{
FF_HKEY_AUTO_DESTROY hKey = NULL;
if(!ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\BIOS", &hKey, NULL)) // SMBIOS
return "ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, L\"HARDWARE\\DESCRIPTION\\System\\BIOS\", &hKey, NULL) failed";
uint32_t chassisType = 0;
if(!ffRegReadUint(hKey, L"EnclosureType", &chassisType, NULL))
return "\"HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\EnclosureType\" doesn't exist";
const char* chassisTypeStr = ffChassisTypeToString(chassisType);
if(!chassisTypeStr)
return "Unknown chassis type";
ffStrbufAppendS(&result->chassisType, chassisTypeStr);
return NULL;
}