-
- if (hide_seconds)
- (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d",
- max(hours, 0), max(minutes, 0));
- else
- (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
- max(hours, 0), max(minutes, 0), max(seconds, 0));
-
- empty_time = time(NULL);
- empty_time += seconds_remaining;
- empty_tm = localtime(&empty_time);
-
- if (hide_seconds)
- (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d",
- max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0));
- else
- (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));
-
- (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
- ((float)present_rate / 1000.0 / 1000.0));
- } else {
- /* On some systems, present_rate may not exist. Still, make sure
- * we colorize the output if threshold_type is set to percentage
- * (since we don't have any information on remaining time). */
- if (status == CS_DISCHARGING && low_threshold > 0) {
- if (strcasecmp(threshold_type, "percentage") == 0 && percentage_remaining < low_threshold) {
- START_COLOR("color_bad");
- colorful_output = true;
- }
+ if (batt_info->full_design > 0) {
+ batt_info->full_design = (((float)voltage / 1000.0) * ((float)batt_info->full_design / 1000.0));
+ }
+ if (batt_info->full_last > 0) {
+ batt_info->full_last = (((float)voltage / 1000.0) * ((float)batt_info->full_last / 1000.0));
+ }
+ }
+#elif defined(__DragonFly__)
+ union acpi_battery_ioctl_arg battio;
+ if (acpi_init()) {
+ battio.unit = number;
+ ioctl(acpifd, ACPIIO_BATT_GET_BIF, &battio);
+ batt_info->full_design = battio.bif.dcap;
+ batt_info->full_last = battio.bif.lfcap;
+ battio.unit = number;
+ ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio);
+ batt_info->percentage_remaining = battio.battinfo.cap;
+ batt_info->present_rate = battio.battinfo.rate;
+ batt_info->seconds_remaining = battio.battinfo.min * 60;
+ switch (battio.battinfo.state) {
+ case 0:
+ batt_info->status = CS_FULL;
+ break;
+ case ACPI_BATT_STAT_CHARGING:
+ batt_info->status = CS_CHARGING;
+ break;
+ case ACPI_BATT_STAT_DISCHARG:
+ batt_info->status = CS_DISCHARGING;
+ break;
+ default:
+ batt_info->status = CS_UNKNOWN;