mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-04-20 03:35:41 +02:00
module/battery: use time_to_empty_now if available
This commit is contained in:
parent
70b528b088
commit
50b4bf3783
1 changed files with 30 additions and 14 deletions
|
@ -35,6 +35,7 @@ struct private {
|
||||||
long capacity;
|
long capacity;
|
||||||
long energy;
|
long energy;
|
||||||
long power;
|
long power;
|
||||||
|
long time_to_empty;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -65,16 +66,24 @@ content(struct module *mod)
|
||||||
unsigned long energy = m->state == STATE_CHARGING
|
unsigned long energy = m->state == STATE_CHARGING
|
||||||
? m->energy_full - m->energy : m->energy;
|
? m->energy_full - m->energy : m->energy;
|
||||||
|
|
||||||
double hours_as_float;
|
unsigned long hours;
|
||||||
if (m->state == STATE_FULL)
|
unsigned long minutes;
|
||||||
hours_as_float = 0.0;
|
|
||||||
else if (m->power > 0)
|
|
||||||
hours_as_float = (double)energy / m->power;
|
|
||||||
else
|
|
||||||
hours_as_float = 99.0;
|
|
||||||
|
|
||||||
unsigned long hours = hours_as_float;
|
if (m->time_to_empty < 0) {
|
||||||
unsigned long minutes = (hours_as_float - (double)hours) * 60;
|
double hours_as_float;
|
||||||
|
if (m->state == STATE_FULL)
|
||||||
|
hours_as_float = 0.0;
|
||||||
|
else if (m->power > 0)
|
||||||
|
hours_as_float = (double)energy / m->power;
|
||||||
|
else
|
||||||
|
hours_as_float = 99.0;
|
||||||
|
|
||||||
|
hours = hours_as_float;
|
||||||
|
minutes = (hours_as_float - (double)hours) * 60;
|
||||||
|
} else {
|
||||||
|
hours = m->time_to_empty / 60;
|
||||||
|
minutes = m->time_to_empty % 60;
|
||||||
|
}
|
||||||
|
|
||||||
char estimate[64];
|
char estimate[64];
|
||||||
snprintf(estimate, sizeof(estimate), "%02lu:%02lu", hours, minutes);
|
snprintf(estimate, sizeof(estimate), "%02lu:%02lu", hours, minutes);
|
||||||
|
@ -212,13 +221,14 @@ err:
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_status(struct module *mod, int capacity_fd, int energy_fd, int power_fd,
|
update_status(struct module *mod, int capacity_fd, int energy_fd, int power_fd,
|
||||||
int status_fd)
|
int status_fd, int time_to_empty_fd)
|
||||||
{
|
{
|
||||||
struct private *m = mod->private;
|
struct private *m = mod->private;
|
||||||
|
|
||||||
long capacity = readint_from_fd(capacity_fd);
|
long capacity = readint_from_fd(capacity_fd);
|
||||||
long energy = readint_from_fd(energy_fd);
|
long energy = energy_fd >= 0 ? readint_from_fd(energy_fd) : -1;
|
||||||
long power = readint_from_fd(power_fd);
|
long power = power_fd >= 0 ? readint_from_fd(power_fd) : -1;
|
||||||
|
long time_to_empty = time_to_empty_fd >= 0 ? readint_from_fd(time_to_empty_fd) : -1;
|
||||||
|
|
||||||
const char *status = readline_from_fd(status_fd);
|
const char *status = readline_from_fd(status_fd);
|
||||||
enum state state;
|
enum state state;
|
||||||
|
@ -243,6 +253,7 @@ update_status(struct module *mod, int capacity_fd, int energy_fd, int power_fd,
|
||||||
m->capacity = capacity;
|
m->capacity = capacity;
|
||||||
m->energy = energy;
|
m->energy = energy;
|
||||||
m->power = power;
|
m->power = power;
|
||||||
|
m->time_to_empty = time_to_empty;
|
||||||
mtx_unlock(&mod->lock);
|
mtx_unlock(&mod->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,20 +276,25 @@ run(struct module *mod)
|
||||||
int capacity_fd = openat(base_dir_fd, "capacity", O_RDONLY);
|
int capacity_fd = openat(base_dir_fd, "capacity", O_RDONLY);
|
||||||
int energy_fd = openat(base_dir_fd, "energy_now", O_RDONLY);
|
int energy_fd = openat(base_dir_fd, "energy_now", O_RDONLY);
|
||||||
int power_fd = openat(base_dir_fd, "power_now", O_RDONLY);
|
int power_fd = openat(base_dir_fd, "power_now", O_RDONLY);
|
||||||
|
int time_to_empty_fd = openat(base_dir_fd, "time_to_empty_now", O_RDONLY);
|
||||||
|
|
||||||
struct udev *udev = udev_new();
|
struct udev *udev = udev_new();
|
||||||
struct udev_monitor *mon = udev_monitor_new_from_netlink(udev, "udev");
|
struct udev_monitor *mon = udev_monitor_new_from_netlink(udev, "udev");
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (status_fd == -1 || capacity_fd == -1 || energy_fd == -1 ||
|
if (status_fd == -1 || capacity_fd == -1 || energy_fd == -1 ||
|
||||||
power_fd == -1 || udev == NULL || mon == NULL)
|
power_fd == -1 || udev == NULL || mon == NULL)
|
||||||
{
|
{
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
if (status_fd < 0 || capacity_fd < 0 || udev == NULL || mon == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL);
|
udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL);
|
||||||
udev_monitor_enable_receiving(mon);
|
udev_monitor_enable_receiving(mon);
|
||||||
|
|
||||||
update_status(mod, capacity_fd, energy_fd, power_fd, status_fd);
|
update_status(mod, capacity_fd, energy_fd, power_fd, status_fd, time_to_empty_fd);
|
||||||
bar->refresh(bar);
|
bar->refresh(bar);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -304,7 +320,7 @@ run(struct module *mod)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_status(mod, capacity_fd, energy_fd, power_fd, status_fd);
|
update_status(mod, capacity_fd, energy_fd, power_fd, status_fd, time_to_empty_fd);
|
||||||
bar->refresh(bar);
|
bar->refresh(bar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue