Differentiate "Not Charging" and "Discharging" in state tag of battery module.

Some batteries support charge thresholds and when the upper limit is set to a number less than 100 percent and it reaches that limit and it is connected to the charger the battery state will be "Not charging".
It doesn't charge anymore despite it's not full.
This commit is contained in:
mz 2021-06-14 19:02:01 +02:00
parent 914cea1b14
commit 35e6943531

View file

@ -20,7 +20,7 @@
#include "../config-verify.h"
#include "../plugin.h"
enum state { STATE_FULL, STATE_CHARGING, STATE_DISCHARGING };
enum state { STATE_FULL, STATE_NOTCHARGING, STATE_CHARGING, STATE_DISCHARGING };
struct private {
struct particle *label;
@ -65,6 +65,7 @@ content(struct module *mod)
mtx_lock(&mod->lock);
assert(m->state == STATE_FULL ||
m->state == STATE_NOTCHARGING ||
m->state == STATE_CHARGING ||
m->state == STATE_DISCHARGING);
@ -79,7 +80,7 @@ content(struct module *mod)
? m->energy_full - m->energy : m->energy;
double hours_as_float;
if (m->state == STATE_FULL)
if (m->state == STATE_FULL || m->state == STATE_NOTCHARGING)
hours_as_float = 0.0;
else if (m->power > 0)
hours_as_float = (double)energy / m->power;
@ -93,7 +94,7 @@ content(struct module *mod)
? m->charge_full - m->charge : m->charge;
double hours_as_float;
if (m->state == STATE_FULL)
if (m->state == STATE_FULL || m->state == STATE_NOTCHARGING)
hours_as_float = 0.0;
else if (m->current > 0)
hours_as_float = (double)charge / m->current;
@ -117,6 +118,7 @@ content(struct module *mod)
tag_new_string(mod, "model", m->model),
tag_new_string(mod, "state",
m->state == STATE_FULL ? "full" :
m->state == STATE_NOTCHARGING ? "not charging" :
m->state == STATE_CHARGING ? "charging" :
m->state == STATE_DISCHARGING ? "discharging" :
"unknown"),
@ -349,12 +351,12 @@ update_status(struct module *mod)
state = STATE_DISCHARGING;
} else if (strcmp(status, "Full") == 0)
state = STATE_FULL;
else if (strcmp(status, "Not charging") == 0)
state = STATE_NOTCHARGING;
else if (strcmp(status, "Charging") == 0)
state = STATE_CHARGING;
else if (strcmp(status, "Discharging") == 0)
state = STATE_DISCHARGING;
else if (strcmp(status, "Not charging") == 0)
state = STATE_DISCHARGING;
else if (strcmp(status, "Unknown") == 0)
state = STATE_DISCHARGING;
else {