From 934b1484b240151f58b147ffb04994179dd6d616 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 15 Jan 2025 15:38:18 +1100 Subject: Add a hard reset input sequence to recover from broken device states - Unlock device - Hold both volume buttons - Lock device - Unlock device --- src/tangara/input/input_hard_reset.cpp | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/tangara/input/input_hard_reset.cpp (limited to 'src/tangara/input/input_hard_reset.cpp') diff --git a/src/tangara/input/input_hard_reset.cpp b/src/tangara/input/input_hard_reset.cpp new file mode 100644 index 00000000..7fcca3eb --- /dev/null +++ b/src/tangara/input/input_hard_reset.cpp @@ -0,0 +1,50 @@ +/* + * Copyright 2025 jacqueline + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include "input/input_hard_reset.hpp" + +#include "drivers/gpios.hpp" +#include "esp_system.h" +#include "input/input_hook_actions.hpp" + +namespace input { + +HardReset::HardReset(drivers::IGpios& gpios) : gpios_(gpios) {} + +auto HardReset::read(lv_indev_data_t* data) -> void { + bool buttons_pressed = !gpios_.Get(drivers::IGpios::Pin::kKeyUp) && + !gpios_.Get(drivers::IGpios::Pin::kKeyDown); + if (!buttons_pressed) { + stage_ = 0; + return; + } + + bool locked = gpios_.IsLocked(); + + if (stage_ == 0 && !locked) { + stage_++; + return; + } + if (stage_ == 1 && locked) { + stage_++; + return; + } + if (stage_ == 2 && !locked) { + // Bye! + esp_restart(); + } +} + +auto HardReset::name() -> std::string { + return "hard_reset"; +} + +auto HardReset::triggers() + -> std::vector> { + return {}; +} + +} // namespace input -- cgit v1.2.3