aboutsummaryrefslogtreecommitdiff
path: root/src/print_battery_info.c
diff options
context:
space:
mode:
authorSimon Elsbrock2012-08-23 16:42:38 +0200
committerMichael Stapelberg2012-08-28 18:05:11 +0200
commit68f438ec9eefbca5d735a1a7897d52e0e8e6f1c7 (patch)
tree47b3009417de351625131bc3525154acf8c70fcf /src/print_battery_info.c
parentuse correct units for battery calculation (diff)
add additional battery threshold type "percentage"
The battery threshold can now be configured as type "time" or "percentage", but defaults to "time" to prevent unexpected behavior. Also, low_threshold was set to a more reasonable default of 30.
Diffstat (limited to 'src/print_battery_info.c')
-rw-r--r--src/print_battery_info.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/print_battery_info.c b/src/print_battery_info.c
index 3e130c7..202d9bb 100644
--- a/src/print_battery_info.c
+++ b/src/print_battery_info.c
@@ -29,7 +29,7 @@
* worn off your battery is.
*
*/
-void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, int threshold, bool last_full_capacity) {
+void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, int low_threshold, char *threshold_type, bool last_full_capacity) {
time_t empty_time;
struct tm *empty_tm;
char buf[1024];
@@ -127,8 +127,8 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
(void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
- (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%",
- (((float)remaining / (float)full_design) * 100));
+ float percentage_remaining = (((float)remaining / (float)full_design) * 100);
+ (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%", percentage_remaining);
if (present_rate > 0) {
float remaining_time;
@@ -146,8 +146,15 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
minutes = seconds / 60;
seconds -= (minutes * 60);
- if (status == CS_DISCHARGING && threshold > 0 && seconds_remaining < 60 * threshold)
- START_COLOR("color_bad");
+ if (status == CS_DISCHARGING && low_threshold > 0) {
+ if (strncmp(threshold_type, "percentage", strlen(threshold_type)) == 0
+ && percentage_remaining < low_threshold) {
+ START_COLOR("color_bad");
+ } else if (strncmp(threshold_type, "time", strlen(threshold_type)) == 0
+ && seconds_remaining < 60 * low_threshold) {
+ START_COLOR("color_bad");
+ }
+ }
(void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
max(hours, 0), max(minutes, 0), max(seconds, 0));