Battery: add power adapter support ( macOS )

This commit is contained in:
李通洲
2022-09-22 19:00:59 +08:00
parent 464a57b319
commit 6e09157235
9 changed files with 57 additions and 0 deletions
+1
View File
@@ -183,6 +183,7 @@ static void defaultConfig(FFinstance* instance)
initModuleArg(&instance->config.swap);
initModuleArg(&instance->config.disk);
initModuleArg(&instance->config.battery);
initModuleArg(&instance->config.powerAdapter);
initModuleArg(&instance->config.locale);
initModuleArg(&instance->config.localIP);
initModuleArg(&instance->config.publicIP);
+2
View File
@@ -12,6 +12,8 @@ typedef struct BatteryResult
FFstrbuf technology;
FFstrbuf capacity;
FFstrbuf status;
FFstrbuf adapterName;
int adapterWatts;
} BatteryResult;
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results);
+10
View File
@@ -69,6 +69,16 @@ const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
else
ffStrbufAppendS(&battery->status, "");
ffStrbufInit(&battery->adapterName);
battery->adapterWatts = -1;
CFDictionaryRef adapter;
if(!ffCfDictGetDict(properties, CFSTR("AdapterDetails"), &adapter))
{
ffCfDictGetInt(adapter, CFSTR("Watts"), &battery->adapterWatts);
ffCfDictGetString(adapter, CFSTR("Name"), &battery->adapterName);
}
CFRelease(properties);
IOObjectRelease(registryEntry);
}
+3
View File
@@ -70,6 +70,9 @@ static void parseBattery(FFstrbuf* dir, FFlist* results)
ffStrbufAppendS(dir, "/status");
ffReadFileBuffer(dir->chars, &result->status);
ffStrbufSubstrBefore(dir, dirLength);
ffStrbufInitA(&result->adapterName, 0);
result->adapterWatts = -1;
}
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results) {
+6
View File
@@ -1117,6 +1117,12 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
optionParseString(key, value, &instance->config.battery.outputFormat);
else if(strcasecmp(key, "--battery-error") == 0)
optionParseString(key, value, &instance->config.battery.errorFormat);
else if(strcasecmp(key, "--power-adapter-key") == 0)
optionParseString(key, value, &instance->config.powerAdapter.key);
else if(strcasecmp(key, "--power-adapter-format") == 0)
optionParseString(key, value, &instance->config.powerAdapter.outputFormat);
else if(strcasecmp(key, "--power-adapter-error") == 0)
optionParseString(key, value, &instance->config.powerAdapter.errorFormat);
else if(strcasecmp(key, "--locale-key") == 0)
optionParseString(key, value, &instance->config.locale.key);
else if(strcasecmp(key, "--locale-format") == 0)
+1
View File
@@ -116,6 +116,7 @@ typedef struct FFconfig
FFModuleArgs swap;
FFModuleArgs disk;
FFModuleArgs battery;
FFModuleArgs powerAdapter;
FFModuleArgs locale;
FFModuleArgs localIP;
FFModuleArgs publicIP;
+23
View File
@@ -5,6 +5,9 @@
#define FF_BATTERY_MODULE_NAME "Battery"
#define FF_BATTERY_NUM_FORMAT_ARGS 5
#define FF_POWER_ADAPTER_MODULE_NAME "Power Adapter"
#define FF_POWER_ADAPTER_MODULE_ARGS 2
static void printBattery(FFinstance* instance, const BatteryResult* result, uint8_t index)
{
if(instance->config.battery.outputFormat.length == 0)
@@ -44,6 +47,26 @@ static void printBattery(FFinstance* instance, const BatteryResult* result, uint
{FF_FORMAT_ARG_TYPE_STRBUF, &result->status}
});
}
if(result->adapterWatts != -1)
{
if(instance->config.powerAdapter.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter.key);
if(result->adapterName.length > 0)
puts(result->adapterName.chars);
else
printf("%dW\n", result->adapterWatts);
}
else
{
ffPrintFormat(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter, FF_POWER_ADAPTER_MODULE_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_INT, &result->adapterWatts},
{FF_FORMAT_ARG_TYPE_STRBUF, &result->adapterName},
});
}
}
}
void ffPrintBattery(FFinstance* instance)
+10
View File
@@ -57,3 +57,13 @@ const char* ffCfDictGetInt(CFDictionaryRef dict, CFStringRef key, int* result)
return "Number type is not SInt32";
return NULL;
}
const char* ffCfDictGetDict(CFDictionaryRef dict, CFStringRef key, CFDictionaryRef* result)
{
CFDictionaryRef cf = (CFDictionaryRef)CFDictionaryGetValue(dict, key);
if (cf == NULL || CFGetTypeID(cf) != CFDictionaryGetTypeID())
return "TypeID is not 'CFDictionary'";
*result = cf;
return NULL;
}
+1
View File
@@ -11,5 +11,6 @@ const char* ffCfStrGetString(CFStringRef str, FFstrbuf* result);
const char* ffCfDictGetString(CFDictionaryRef dict, CFStringRef key, FFstrbuf* result);
const char* ffCfDictGetBool(CFDictionaryRef dict, CFStringRef key, bool* result);
const char* ffCfDictGetInt(CFDictionaryRef dict, CFStringRef key, int* result);
const char* ffCfDictGetDict(CFDictionaryRef dict, CFStringRef key, CFDictionaryRef* result);
#endif