master ohmu/fastfetch-openbsd / src / detection / poweradapter / poweradapter_apple.c
ohmu  ·  2026-10-15
 1#include "fastfetch.h"
 2#include "poweradapter.h"
 3#include "common/apple/cf_helpers.h"
 4
 5#include <IOKit/ps/IOPowerSources.h>
 6#include <IOKit/ps/IOPSKeys.h>
 7
 8const char* ffDetectPowerAdapter(FFlist* results) {
 9    FF_CFTYPE_AUTO_RELEASE CFDictionaryRef details = IOPSCopyExternalPowerAdapterDetails();
10    if (details && CFDictionaryContainsKey(details, CFSTR(kIOPSPowerAdapterWattsKey))) {
11        FFPowerAdapterResult* adapter = FF_LIST_ADD(FFPowerAdapterResult, *results);
12
13        ffStrbufInit(&adapter->name);
14        ffStrbufInit(&adapter->description);
15        ffStrbufInit(&adapter->manufacturer);
16        ffStrbufInit(&adapter->modelName);
17        ffStrbufInit(&adapter->serial);
18        adapter->watts = 0;
19
20        ffCfDictGetString(details, CFSTR(kIOPSNameKey), &adapter->name);
21        if (ffCfDictGetString(details, CFSTR("Model"), &adapter->modelName) != nullptr) {
22            int adapterId;
23            if (ffCfDictGetInt(details, CFSTR(kIOPSPowerAdapterIDKey), &adapterId) == 0) {
24                ffStrbufSetF(&adapter->modelName, "%d", adapterId);
25            }
26        }
27        ffCfDictGetString(details, CFSTR("Manufacturer"), &adapter->manufacturer);
28        ffCfDictGetString(details, CFSTR("Description"), &adapter->description);
29        if (ffCfDictGetString(details, CFSTR("SerialString"), &adapter->serial) != nullptr) {
30            int serialNumber;
31            if (ffCfDictGetInt(details, CFSTR(kIOPSPowerAdapterSerialNumberKey), &serialNumber) == 0) {
32                ffStrbufSetF(&adapter->serial, "%X", serialNumber);
33            }
34        }
35        ffCfDictGetInt(details, CFSTR(kIOPSPowerAdapterWattsKey), &adapter->watts);
36    }
37
38    return nullptr;
39}