#include <machine/apmvar.h>
#endif
+#define BATT_STATUS_NAME(status) \
+ (status == CS_CHARGING ? "CHR" : \
+ (status == CS_DISCHARGING ? "BAT" : "FULL"))
/*
* Get battery information from /sys. Note that it uses the design capacity to
* calculate the percentage, not the last full capacity, so you can see how
* worn off your battery is.
*
*/
-void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, bool last_full_capacity) {
+void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, int threshold, bool last_full_capacity) {
time_t empty_time;
struct tm *empty_tm;
char buf[1024];
}
}
- if ((full_design == 1) || (remaining == -1))
+ if ((full_design == -1) || (remaining == -1)) {
+ OUTPUT_FULL_TEXT("No battery");
return;
+ }
- (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
- (status == CS_CHARGING ? "CHR" :
- (status == CS_DISCHARGING ? "BAT" : "FULL")));
+ (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
(void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%",
(((float)remaining / (float)full_design) * 100));
minutes = seconds / 60;
seconds -= (minutes * 60);
+ if (threshold > 0 && seconds_remaining < 60 * threshold)
+ START_COLOR("color_bad");
+
(void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
max(hours, 0), max(minutes, 0), max(seconds, 0));
(void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
+
+ END_COLOR;
}
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
int state;
size_t sysctl_size = sizeof(sysctl_rslt);
if (sysctlbyname(BATT_LIFE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
- printf("No battery");
+ OUTPUT_FULL_TEXT("No battery");
return;
}
present_rate = sysctl_rslt;
if (sysctlbyname(BATT_TIME, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
- printf("No battery");
+ OUTPUT_FULL_TEXT("No battery");
return;
}
remaining = sysctl_rslt;
if (sysctlbyname(BATT_STATE, &sysctl_rslt, &sysctl_size, NULL,0) != 0) {
- printf("No battery");
+ OUTPUT_FULL_TEXT("No battery");
return;
}
full_design = sysctl_rslt;
- (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
- (status == CS_CHARGING ? "CHR" :
- (status == CS_DISCHARGING ? "BAT" : "FULL")));
+ (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
(void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%",
present_rate);
break;
}
- (void)snprintf(statusbuf, sizeof(statusbuf), "%s",
- (ac_status == CS_CHARGING ? "CHR" :
- (ac_status == CS_DISCHARGING ? "BAT" : "FULL")));
-
+ (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
(void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%", apm_info.battery_life);
/* Can't give a meaningful value for remaining minutes if we're charging. */