aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/GPIO/batterycharge.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/GPIO/batterycharge.c')
-rw-r--r--src/common/GPIO/batterycharge.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/common/GPIO/batterycharge.c b/src/common/GPIO/batterycharge.c
index 95176cd..d68a805 100644
--- a/src/common/GPIO/batterycharge.c
+++ b/src/common/GPIO/batterycharge.c
@@ -29,8 +29,13 @@
#include <stdlib.h>
#include <errno.h>
+// Hysteresis:
+#define CHARGE_QRP 1300000
+#define CHARGE_QRO 1350000
+
static int charge_valid;
static uint32_t last_charge;
+static int charge_qrp;
void batterycharge_init()
{
@@ -39,6 +44,7 @@ void batterycharge_init()
*/
charge_valid = 0;
last_charge = 0;
+ charge_qrp = 0;
}
void batterycharge_push_message(const char *ccounter_msg)
@@ -85,3 +91,24 @@ uint32_t batterycharge_retrieve_last_capacity()
taskENABLE_INTERRUPTS();
return ret;
}
+
+int batterycharge_too_low()
+{
+ taskDISABLE_INTERRUPTS();
+ uint32_t c = 0;
+ if (charge_valid) {
+ c = last_charge;
+ }
+ taskENABLE_INTERRUPTS();
+
+ if (c == 0) {
+ return -1;
+ }
+ else if (charge_qrp == 0 && c < CHARGE_QRP) {
+ charge_qrp = 1;
+ }
+ else if (charge_qrp == 1 && c >= CHARGE_QRO) {
+ charge_qrp = 0;
+ }
+ return charge_qrp;
+}