/* htop - BatteryMeter.c (C) 2004-2011 Hisham H. Muhammad Released under the GNU GPLv2+, see the COPYING file in the source distribution for its full text. This meter written by Ian P. Hands (iphands@gmail.com, ihands@redhat.com). */ #include "config.h" // IWYU pragma: keep #include "BatteryMeter.h" #include #include "CRT.h" #include "Macros.h" #include "Object.h" #include "Platform.h" #include "XUtils.h" static const int BatteryMeter_attributes[] = { BATTERY }; static void BatteryMeter_updateValues(Meter* this) { ACPresence isOnAC; double percent; Platform_getBattery(&percent, &isOnAC); if (!isNonnegative(percent)) { this->values[0] = NAN; xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "N/A"); return; } this->values[0] = percent; const char* text; switch (isOnAC) { case AC_PRESENT: text = this->mode == TEXT_METERMODE ? " (Running on A/C)" : "(A/C)"; break; case AC_ABSENT: text = this->mode == TEXT_METERMODE ? " (Running on battery)" : "(bat)"; break; case AC_ERROR: default: text = ""; break; } xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%.1f%%%s", percent, text); } const MeterClass BatteryMeter_class = { .super = { .extends = Class(Meter), .delete = Meter_delete }, .updateValues = BatteryMeter_updateValues, .defaultMode = TEXT_METERMODE, .supportedModes = METERMODE_DEFAULT_SUPPORTED, .maxItems = 1, .total = 100.0, .attributes = BatteryMeter_attributes, .name = "Battery", .uiName = "Battery", .caption = "Battery: " };