diff --git a/Firmware/main/include/power_helper.hpp b/Firmware/main/include/power_helper.hpp index 72e1684..ff644d5 100644 --- a/Firmware/main/include/power_helper.hpp +++ b/Firmware/main/include/power_helper.hpp @@ -16,6 +16,8 @@ public: void reset_slow_isr(); // FIXME: void delay(int slow_ms, int normal_ms); + void install_isr(); + private: PowerHelper(); diff --git a/Firmware/main/include/shutdowner.hpp b/Firmware/main/include/shutdowner.hpp index f4cfa60..0f3f089 100644 --- a/Firmware/main/include/shutdowner.hpp +++ b/Firmware/main/include/shutdowner.hpp @@ -9,7 +9,7 @@ class Shutdowner { public: static Shutdowner& get(); - + void install_isr(); private: Shutdowner(); }; diff --git a/Firmware/main/src/hello_world_main.cpp b/Firmware/main/src/hello_world_main.cpp index eefabbc..9301158 100644 --- a/Firmware/main/src/hello_world_main.cpp +++ b/Firmware/main/src/hello_world_main.cpp @@ -43,9 +43,13 @@ extern "C" void app_main() { printf("Hello world!\n"); // TODO: Where to put that? ESP_ERROR_CHECK(esp_sleep_enable_gpio_wakeup()); - ESP_ERROR_CHECK(gpio_install_isr_service(0)); + // For some reason, calling it here hangs on startup, sometimes + // ESP_ERROR_CHECK(gpio_install_isr_service(0)); PowerHelper::get(); Shutdowner::get(); + ESP_ERROR_CHECK(gpio_install_isr_service(0)); + Shutdowner::get().install_isr(); + PowerHelper::get().install_isr(); Buttons::get(); I2cGlobal::get(); BatMon::get(); diff --git a/Firmware/main/src/power_helper.cpp b/Firmware/main/src/power_helper.cpp index d59b192..b8deb56 100644 --- a/Firmware/main/src/power_helper.cpp +++ b/Firmware/main/src/power_helper.cpp @@ -47,7 +47,7 @@ PowerHelper::PowerHelper() : _event_group(xEventGroupCreate()) { ESP_ERROR_CHECK(gpio_set_intr_type(DIRECT_BTN, GPIO_INTR_HIGH_LEVEL)); ESP_ERROR_CHECK(gpio_wakeup_enable(DIRECT_BTN, GPIO_INTR_HIGH_LEVEL)); // ESP_ERROR_CHECK(gpio_install_isr_service(0)); - gpio_isr_handler_add(DIRECT_BTN, wakeup, this); + // gpio_isr_handler_add(DIRECT_BTN, wakeup, this); set_slow(false); } @@ -67,3 +67,4 @@ void PowerHelper::delay(int slow_ms, int normal_ms) { vTaskDelay(normal_ms / portTICK_PERIOD_MS); } } +void PowerHelper::install_isr() { gpio_isr_handler_add(DIRECT_BTN, wakeup, this); } diff --git a/Firmware/main/src/shutdowner.cpp b/Firmware/main/src/shutdowner.cpp index 70b9482..372a823 100644 --- a/Firmware/main/src/shutdowner.cpp +++ b/Firmware/main/src/shutdowner.cpp @@ -33,5 +33,7 @@ Shutdowner::Shutdowner() { ESP_ERROR_CHECK(gpio_wakeup_enable(PWR_INT, GPIO_INTR_LOW_LEVEL)); // ESP_ERROR_CHECK(gpio_install_isr_service(0)); ESP_ERROR_CHECK(gpio_hold_en(PWR_KILL)); - gpio_isr_handler_add(PWR_INT, shutdown, nullptr); + // gpio_isr_handler_add(PWR_INT, shutdown, nullptr); } + +void Shutdowner::install_isr() { gpio_isr_handler_add(PWR_INT, shutdown, nullptr); }