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}