Add factory reset

Signed-off-by: YoungSoo Shin <shinys000114@gmail.com>
This commit is contained in:
2025-09-24 11:09:35 +09:00
parent 26773507d5
commit 46b0ea7bda

View File

@@ -37,6 +37,7 @@ static const char* TAG = "monitor";
static esp_timer_handle_t sensor_timer; static esp_timer_handle_t sensor_timer;
static esp_timer_handle_t wifi_status_timer; static esp_timer_handle_t wifi_status_timer;
static esp_timer_handle_t long_press_timer;
// static esp_timer_handle_t shutdown_load_sw; // No longer needed // static esp_timer_handle_t shutdown_load_sw; // No longer needed
static TaskHandle_t shutdown_task_handle = NULL; // Global task handle static TaskHandle_t shutdown_task_handle = NULL; // Global task handle
@@ -155,6 +156,22 @@ static void status_wifi_callback(void* arg)
send_pb_message(StatusMessage_fields, &message); send_pb_message(StatusMessage_fields, &message);
} }
// Placeholder for long press action
static void handle_critical_long_press(void)
{
ESP_LOGW(TAG, "Config reset triggered...");
reset_nconfig();
}
// Timer callback for long press detection
static void long_press_timer_callback(void* arg)
{
if (gpio_get_level(PM_INT_CRITICAL) == 0)
{
handle_critical_long_press();
}
}
// New FreeRTOS task for shutdown logic // New FreeRTOS task for shutdown logic
static void shutdown_load_sw_task(void* pvParameters) static void shutdown_load_sw_task(void* pvParameters)
{ {
@@ -168,15 +185,26 @@ static void shutdown_load_sw_task(void* pvParameters)
vTaskDelay(100 / portTICK_PERIOD_MS); vTaskDelay(100 / portTICK_PERIOD_MS);
gpio_set_level(PM_EXPANDER_RST, 1); gpio_set_level(PM_EXPANDER_RST, 1);
config_sw(); config_sw();
// Start a 5-second timer to check for long press
esp_timer_start_once(long_press_timer, 5000000);
} }
} }
static void IRAM_ATTR critical_isr_handler(void* arg) static void IRAM_ATTR critical_isr_handler(void* arg)
{ {
BaseType_t xHigherPriorityTaskWoken = pdFALSE; BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (shutdown_task_handle != NULL) if (gpio_get_level(PM_INT_CRITICAL) == 0) // Falling edge
{ {
vTaskNotifyGiveFromISR(shutdown_task_handle, &xHigherPriorityTaskWoken); if (shutdown_task_handle != NULL)
{
vTaskNotifyGiveFromISR(shutdown_task_handle, &xHigherPriorityTaskWoken);
}
}
else // Rising edge
{
// Stop the timer if the button is released
esp_timer_stop(long_press_timer);
} }
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
} }
@@ -184,7 +212,7 @@ static void IRAM_ATTR critical_isr_handler(void* arg)
static void gpio_init() static void gpio_init()
{ {
// critical int // critical int
gpio_set_intr_type(PM_INT_CRITICAL, GPIO_INTR_NEGEDGE); gpio_set_intr_type(PM_INT_CRITICAL, GPIO_INTR_ANYEDGE);
gpio_set_direction(PM_INT_CRITICAL, GPIO_MODE_INPUT); gpio_set_direction(PM_INT_CRITICAL, GPIO_MODE_INPUT);
gpio_install_isr_service(0); gpio_install_isr_service(0);
gpio_isr_handler_add(PM_INT_CRITICAL, critical_isr_handler, (void*)PM_INT_CRITICAL); gpio_isr_handler_add(PM_INT_CRITICAL, critical_isr_handler, (void*)PM_INT_CRITICAL);
@@ -246,9 +274,12 @@ void init_status_monitor()
const esp_timer_create_args_t sensor_timer_args = {.callback = &sensor_timer_callback, const esp_timer_create_args_t sensor_timer_args = {.callback = &sensor_timer_callback,
.name = "sensor_reading_timer"}; .name = "sensor_reading_timer"};
const esp_timer_create_args_t wifi_timer_args = {.callback = &status_wifi_callback, .name = "wifi_status_timer"}; const esp_timer_create_args_t wifi_timer_args = {.callback = &status_wifi_callback, .name = "wifi_status_timer"};
const esp_timer_create_args_t long_press_timer_args = {.callback = &long_press_timer_callback,
.name = "long_press_timer"};
ESP_ERROR_CHECK(esp_timer_create(&sensor_timer_args, &sensor_timer)); ESP_ERROR_CHECK(esp_timer_create(&sensor_timer_args, &sensor_timer));
ESP_ERROR_CHECK(esp_timer_create(&wifi_timer_args, &wifi_status_timer)); ESP_ERROR_CHECK(esp_timer_create(&wifi_timer_args, &wifi_status_timer));
ESP_ERROR_CHECK(esp_timer_create(&long_press_timer_args, &long_press_timer));
xTaskCreate(shutdown_load_sw_task, "shutdown_sw_task", configMINIMAL_STACK_SIZE * 3, NULL, 15, &shutdown_task_handle); xTaskCreate(shutdown_load_sw_task, "shutdown_sw_task", configMINIMAL_STACK_SIZE * 3, NULL, 15, &shutdown_task_handle);