From ea9622b8c9444d92007f24fc54597f83c498f11d Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Tue, 17 Nov 2020 18:12:38 +1100 Subject: Merge individual Battery.[ch] files into Platform.[ch] Consistent with everything else involving platform-specific calls from core htop code. --- darwin/Battery.c | 73 ------------------------------------------------------- darwin/Battery.h | 8 ------ darwin/Platform.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ darwin/Platform.h | 2 ++ 4 files changed, 70 insertions(+), 81 deletions(-) delete mode 100644 darwin/Battery.c delete mode 100644 darwin/Battery.h (limited to 'darwin') diff --git a/darwin/Battery.c b/darwin/Battery.c deleted file mode 100644 index c89f5b30..00000000 --- a/darwin/Battery.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "Battery.h" - -#include - -#include -#include -#include -#include - -void Battery_getData(double* level, ACPresence* isOnAC) { - CFTypeRef power_sources = IOPSCopyPowerSourcesInfo(); - - *level = NAN; - *isOnAC = AC_ERROR; - - if (NULL == power_sources) { - return; - } - - CFArrayRef list = IOPSCopyPowerSourcesList(power_sources); - CFDictionaryRef battery = NULL; - int len; - - if (NULL == list) { - CFRelease(power_sources); - - return; - } - - len = CFArrayGetCount(list); - - /* Get the battery */ - for (int i = 0; i < len && battery == NULL; ++i) { - CFDictionaryRef candidate = IOPSGetPowerSourceDescription(power_sources, - CFArrayGetValueAtIndex(list, i)); /* GET rule */ - CFStringRef type; - - if (NULL != candidate) { - type = (CFStringRef) CFDictionaryGetValue(candidate, - CFSTR(kIOPSTransportTypeKey)); /* GET rule */ - - if (kCFCompareEqualTo == CFStringCompare(type, CFSTR(kIOPSInternalType), 0)) { - CFRetain(candidate); - battery = candidate; - } - } - } - - if (NULL != battery) { - /* Determine the AC state */ - CFStringRef power_state = CFDictionaryGetValue(battery, CFSTR(kIOPSPowerSourceStateKey)); - - *isOnAC = (kCFCompareEqualTo == CFStringCompare(power_state, CFSTR(kIOPSACPowerValue), 0)) - ? AC_PRESENT - : AC_ABSENT; - - /* Get the percentage remaining */ - double current; - double max; - - CFNumberGetValue(CFDictionaryGetValue(battery, CFSTR(kIOPSCurrentCapacityKey)), - kCFNumberDoubleType, ¤t); - CFNumberGetValue(CFDictionaryGetValue(battery, CFSTR(kIOPSMaxCapacityKey)), - kCFNumberDoubleType, &max); - - *level = (current * 100.0) / max; - - CFRelease(battery); - } - - CFRelease(list); - CFRelease(power_sources); -} diff --git a/darwin/Battery.h b/darwin/Battery.h deleted file mode 100644 index 74a27fc5..00000000 --- a/darwin/Battery.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef HEADER_Battery -#define HEADER_Battery - -#include "BatteryMeter.h" - -void Battery_getData(double* level, ACPresence* isOnAC); - -#endif diff --git a/darwin/Platform.c b/darwin/Platform.c index be71360c..bf9645b3 100644 --- a/darwin/Platform.c +++ b/darwin/Platform.c @@ -26,6 +26,10 @@ in the source distribution for its full text. #include #include +#include +#include +#include +#include ProcessField Platform_defaultFields[] = { PID, USER, PRIORITY, NICE, M_SIZE, M_RESIDENT, STATE, PERCENT_CPU, PERCENT_MEM, TIME, COMM, 0 }; @@ -341,3 +345,67 @@ bool Platform_getNetworkIO(unsigned long int* bytesReceived, *packetsTransmitted = 0; return false; } + +void Platform_getBattery(double* level, ACPresence* isOnAC) { + CFTypeRef power_sources = IOPSCopyPowerSourcesInfo(); + + *level = NAN; + *isOnAC = AC_ERROR; + + if (NULL == power_sources) + return; + + CFArrayRef list = IOPSCopyPowerSourcesList(power_sources); + CFDictionaryRef battery = NULL; + int len; + + if (NULL == list) { + CFRelease(power_sources); + + return; + } + + len = CFArrayGetCount(list); + + /* Get the battery */ + for (int i = 0; i < len && battery == NULL; ++i) { + CFDictionaryRef candidate = IOPSGetPowerSourceDescription(power_sources, + CFArrayGetValueAtIndex(list, i)); /* GET rule */ + CFStringRef type; + + if (NULL != candidate) { + type = (CFStringRef) CFDictionaryGetValue(candidate, + CFSTR(kIOPSTransportTypeKey)); /* GET rule */ + + if (kCFCompareEqualTo == CFStringCompare(type, CFSTR(kIOPSInternalType), 0)) { + CFRetain(candidate); + battery = candidate; + } + } + } + + if (NULL != battery) { + /* Determine the AC state */ + CFStringRef power_state = CFDictionaryGetValue(battery, CFSTR(kIOPSPowerSourceStateKey)); + + *isOnAC = (kCFCompareEqualTo == CFStringCompare(power_state, CFSTR(kIOPSACPowerValue), 0)) + ? AC_PRESENT + : AC_ABSENT; + + /* Get the percentage remaining */ + double current; + double max; + + CFNumberGetValue(CFDictionaryGetValue(battery, CFSTR(kIOPSCurrentCapacityKey)), + kCFNumberDoubleType, ¤t); + CFNumberGetValue(CFDictionaryGetValue(battery, CFSTR(kIOPSMaxCapacityKey)), + kCFNumberDoubleType, &max); + + *level = (current * 100.0) / max; + + CFRelease(battery); + } + + CFRelease(list); + CFRelease(power_sources); +} diff --git a/darwin/Platform.h b/darwin/Platform.h index f42b7209..40b7d730 100644 --- a/darwin/Platform.h +++ b/darwin/Platform.h @@ -65,4 +65,6 @@ bool Platform_getNetworkIO(unsigned long int* bytesReceived, unsigned long int* bytesTransmitted, unsigned long int* packetsTransmitted); +void Platform_getBattery(double *percent, ACPresence *isOnAC); + #endif -- cgit v1.2.3