diff --git a/cmake/build/options.cmake b/cmake/build/options.cmake index 3d2a3bd3..4bb493a6 100644 --- a/cmake/build/options.cmake +++ b/cmake/build/options.cmake @@ -65,22 +65,14 @@ set(SETTING_BSPWM_STATUS_PREFIX "W" CACHE STRING "Prefix prepended to the bspwm status line") set(SETTING_CONNECTION_TEST_IP "8.8.8.8" CACHE STRING "Address to ping when testing network connection") -set(SETTING_PATH_ADAPTER_STATUS "/sys/class/power_supply/%adapter%/online" - CACHE STRING "Path to file containing the current adapter status") +set(SETTING_PATH_ADAPTER "/sys/class/power_supply/%adapter%" + CACHE STRING "Path to adapter") set(SETTING_PATH_BACKLIGHT_MAX "/sys/class/backlight/%card%/max_brightness" CACHE STRING "Path to file containing the maximum backlight value") set(SETTING_PATH_BACKLIGHT_VAL "/sys/class/backlight/%card%/brightness" CACHE STRING "Path to file containing the current backlight value") -set(SETTING_PATH_BATTERY_CAPACITY "/sys/class/power_supply/%battery%/charge_now" - CACHE STRING "Path to file containing the current battery capacity") -set(SETTING_PATH_BATTERY_CAPACITY_MAX "/sys/class/power_supply/%battery%/charge_full" - CACHE STRING "Path to file containing the current battery capacity") -set(SETTING_PATH_BATTERY_CAPACITY_PERC "/sys/class/power_supply/%battery%/capacity" - CACHE STRING "Path to file containing the current battery capacity in percentage") -set(SETTING_PATH_BATTERY_RATE "/sys/class/power_supply/%battery%/current_now" - CACHE STRING "Path to file containing the current battery rate") -set(SETTING_PATH_BATTERY_VOLTAGE "/sys/class/power_supply/%battery%/voltage_now" - CACHE STRING "Path to file containing the current battery voltage") +set(SETTING_PATH_BATTERY "/sys/class/power_supply/%battery%" + CACHE STRING "Path to battery") set(SETTING_PATH_CPU_INFO "/proc/stat" CACHE STRING "Path to file containing cpu info") set(SETTING_PATH_MEMORY_INFO "/proc/meminfo" diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 3fe34cdf..25c4b39b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -27,8 +27,8 @@ endif() # }}} # Get battery/adapter name {{{ -string(REGEX REPLACE /%battery%.* "" PATH_BAT ${SETTING_PATH_BATTERY_CAPACITY}) -string(REGEX REPLACE /%adapter%.* "" PATH_ADP ${SETTING_PATH_ADAPTER_STATUS}) +string(REGEX REPLACE /%battery%.* "" PATH_BAT ${SETTING_PATH_BATTERY}) +string(REGEX REPLACE /%adapter%.* "" PATH_ADP ${SETTING_PATH_ADAPTER}) file(GLOB BAT_LIST RELATIVE ${PATH_BAT} ${PATH_ADP}/B*) file(GLOB ADP_LIST RELATIVE ${PATH_ADP} ${PATH_ADP}/A*) @@ -49,9 +49,6 @@ endif() # Get network interfaces {{{ if(ENABLE_NETWORK) - string(REGEX REPLACE /%battery%.* "" PATH_BAT ${SETTING_PATH_BATTERY_CAPACITY}) - string(REGEX REPLACE /%adapter%.* "" PATH_ADP ${SETTING_PATH_ADAPTER_STATUS}) - file(GLOB IFLIST RELATIVE /sys/class/net /sys/class/net/*) foreach(INTERFACE ${IFLIST}) diff --git a/include/config.hpp.cmake b/include/config.hpp.cmake index 5488a666..87100c3a 100644 --- a/include/config.hpp.cmake +++ b/include/config.hpp.cmake @@ -34,14 +34,10 @@ #define BSPWM_SOCKET_PATH "@SETTING_BSPWM_SOCKET_PATH@" #define BSPWM_STATUS_PREFIX "@SETTING_BSPWM_STATUS_PREFIX@" #define CONNECTION_TEST_IP "@SETTING_CONNECTION_TEST_IP@" -#define PATH_ADAPTER_STATUS "@SETTING_PATH_ADAPTER_STATUS@" +#define PATH_ADAPTER "@SETTING_PATH_ADAPTER@" #define PATH_BACKLIGHT_MAX "@SETTING_PATH_BACKLIGHT_MAX@" #define PATH_BACKLIGHT_VAL "@SETTING_PATH_BACKLIGHT_VAL@" -#define PATH_BATTERY_CAPACITY "@SETTING_PATH_BATTERY_CAPACITY@" -#define PATH_BATTERY_CAPACITY_MAX "@SETTING_PATH_BATTERY_CAPACITY_MAX@" -#define PATH_BATTERY_CAPACITY_PERC "@SETTING_PATH_BATTERY_CAPACITY_PERC@" -#define PATH_BATTERY_RATE "@SETTING_PATH_BATTERY_RATE@" -#define PATH_BATTERY_VOLTAGE "@SETTING_PATH_BATTERY_VOLTAGE@" +#define PATH_BATTERY "@SETTING_PATH_BATTERY@" #define PATH_CPU_INFO "@SETTING_PATH_CPU_INFO@" #define PATH_MEMORY_INFO "@SETTING_PATH_MEMORY_INFO@" #define PATH_MESSAGING_FIFO "@SETTING_PATH_MESSAGING_FIFO@" @@ -77,15 +73,10 @@ auto print_build_info = [](bool extended = false) { << "BSPWM_STATUS_PREFIX " << BSPWM_STATUS_PREFIX << "\n" << "BUILDER_SPACE_TOKEN " << BUILDER_SPACE_TOKEN << "\n" << "CONNECTION_TEST_IP " << CONNECTION_TEST_IP << "\n" - << "PATH_ADAPTER_STATUS " << PATH_ADAPTER_STATUS << "\n" + << "PATH_ADAPTER " << PATH_ADAPTER << "\n" << "PATH_BACKLIGHT_MAX " << PATH_BACKLIGHT_MAX << "\n" << "PATH_BACKLIGHT_VAL " << PATH_BACKLIGHT_VAL << "\n" - << "PATH_BATTERY_CAPACITY " << PATH_BATTERY_CAPACITY << "\n" - << "PATH_BATTERY_CAPACITY " << PATH_BATTERY_CAPACITY << "\n" - << "PATH_BATTERY_CAPACITY_MAX " << PATH_BATTERY_CAPACITY_MAX << "\n" - << "PATH_BATTERY_CAPACITY_PERC " << PATH_BATTERY_CAPACITY_PERC << "\n" - << "PATH_BATTERY_RATE " << PATH_BATTERY_RATE << "\n" - << "PATH_BATTERY_VOLTAGE " << PATH_BATTERY_VOLTAGE << "\n" + << "PATH_BATTERY " << PATH_BATTERY << "\n" << "PATH_CPU_INFO " << PATH_CPU_INFO << "\n" << "PATH_MEMORY_INFO " << PATH_MEMORY_INFO << "\n" << "PATH_TEMPERATURE_INFO " << PATH_TEMPERATURE_INFO << "\n"; diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 89e190c0..1f67e2f3 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -21,22 +21,44 @@ namespace modules { * Bootstrap module by setting up required components */ void battery_module::setup() { - // Load configuration values auto battery = m_conf.get(name(), "battery", "BAT0"); auto adapter = m_conf.get(name(), "adapter", "ADP1"); - m_valuepath[battery_value::ADAPTER] = string_util::replace(PATH_ADAPTER_STATUS, "%adapter%", adapter); - m_valuepath[battery_value::CAPACITY] = string_util::replace(PATH_BATTERY_CAPACITY, "%battery%", battery); - m_valuepath[battery_value::CAPACITY_MAX] = string_util::replace(PATH_BATTERY_CAPACITY_MAX, "%battery%", battery); - m_valuepath[battery_value::CAPACITY_PERC] = string_util::replace(PATH_BATTERY_CAPACITY_PERC, "%battery%", battery); - m_valuepath[battery_value::VOLTAGE] = string_util::replace(PATH_BATTERY_VOLTAGE, "%battery%", battery); - m_valuepath[battery_value::RATE] = string_util::replace(PATH_BATTERY_RATE, "%battery%", battery); + auto path_adapter = string_util::replace(PATH_ADAPTER, "%adapter%", adapter) + "/"; + auto path_battery = string_util::replace(PATH_BATTERY, "%battery%", battery) + "/"; - for (auto&& file : m_valuepath) { - if (!file_util::exists(file.second)) - throw module_error("The file '" + file.second + "' does not exist"); + if (!file_util::exists(path_adapter + "online")) + throw module_error("The file '" + path_adapter + "online' does not exist"); + m_valuepath[battery_value::ADAPTER] = path_adapter + "online"; + + if (!file_util::exists(path_battery + "capacity")) + throw module_error("The file '" + path_battery + "capacity' does not exist"); + m_valuepath[battery_value::CAPACITY_PERC] = path_battery + "capacity"; + + if (!file_util::exists(path_battery + "voltage_now")) + throw module_error("The file '" + path_battery + "voltage_now' does not exist"); + m_valuepath[battery_value::VOLTAGE] = path_battery + "voltage_now"; + + for (auto&& file : vector{"charge", "energy"}) { + if (file_util::exists(path_battery + file + "_now")) + m_valuepath[battery_value::CAPACITY] = path_battery + file + "_now"; + if (file_util::exists(path_battery + file + "_full")) + m_valuepath[battery_value::CAPACITY_MAX] = path_battery + file + "_full"; } + if (m_valuepath[battery_value::CAPACITY].empty()) + throw module_error("The file '" + path_battery + "[charge|energy]_now' does not exist"); + if (m_valuepath[battery_value::CAPACITY_MAX].empty()) + throw module_error("The file '" + path_battery + "[charge|energy]_full' does not exist"); + + for (auto&& file : vector{"current", "power"}) { + if (file_util::exists(path_battery + file + "_now")) + m_valuepath[battery_value::RATE] = path_battery + file + "_now"; + } + + if (m_valuepath[battery_value::RATE].empty()) + throw module_error("The file '" + path_battery + "[current|power]_now' does not exist"); + m_fullat = m_conf.get(name(), "full-at", 100); m_interval = chrono::duration{m_conf.get(name(), "poll-interval", 5.0f)}; m_lastpoll = chrono::system_clock::now();