From 8180abed4c7f71db343b2d7eb4fecb8a4d1b030e Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Sat, 26 Jul 2025 12:18:52 +0200 Subject: [PATCH] shutdown on 3v --- Firmware/main/include/shutdowner.hpp | 1 + Firmware/main/src/bat_mon.cpp | 4 ++++ Firmware/main/src/shutdowner.cpp | 9 +++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Firmware/main/include/shutdowner.hpp b/Firmware/main/include/shutdowner.hpp index 0f3f089..09345fe 100644 --- a/Firmware/main/include/shutdowner.hpp +++ b/Firmware/main/include/shutdowner.hpp @@ -10,6 +10,7 @@ class Shutdowner { public: static Shutdowner& get(); void install_isr(); + void shutdown(); private: Shutdowner(); }; diff --git a/Firmware/main/src/bat_mon.cpp b/Firmware/main/src/bat_mon.cpp index 3d41304..17edfd8 100644 --- a/Firmware/main/src/bat_mon.cpp +++ b/Firmware/main/src/bat_mon.cpp @@ -10,6 +10,7 @@ #include "freertos/task.h" #include "i2c_global.hpp" +#include "shutdowner.hpp" static i2c_master_dev_handle_t dev_handle; @@ -105,6 +106,9 @@ void BatMon::pooler() { _current = regToCurrent(ReadRegister(0x0B)); _voltage = regToVoltage(ReadRegister(0x09)); PowerHelper::get().delay(10000, 1000); + if (_voltage < 3.0f) { + Shutdowner::get().shutdown(); + } } } diff --git a/Firmware/main/src/shutdowner.cpp b/Firmware/main/src/shutdowner.cpp index 7011d98..fd4b176 100644 --- a/Firmware/main/src/shutdowner.cpp +++ b/Firmware/main/src/shutdowner.cpp @@ -14,12 +14,17 @@ Shutdowner& Shutdowner::get() { return instance; } -static void IRAM_ATTR shutdown(void* arg) { +static void IRAM_ATTR int_shutdown(void* arg) { // printf("Shutting down...\n"); ESP_ERROR_CHECK(gpio_hold_dis(PWR_KILL)); ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0)); } +void Shutdowner::shutdown() { + ESP_ERROR_CHECK(gpio_hold_dis(PWR_KILL)); + ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0)); +} + Shutdowner::Shutdowner() { ESP_ERROR_CHECK(gpio_reset_pin(PWR_KILL)); ESP_ERROR_CHECK(gpio_set_direction(PWR_KILL, GPIO_MODE_OUTPUT)); @@ -36,4 +41,4 @@ Shutdowner::Shutdowner() { // gpio_isr_handler_add(PWR_INT, shutdown, nullptr); } -void Shutdowner::install_isr() { gpio_isr_handler_add(PWR_INT, shutdown, nullptr); } +void Shutdowner::install_isr() { gpio_isr_handler_add(PWR_INT, int_shutdown, nullptr); }