diff --git a/main/control.c b/main/control.c index 136b46b..bac154c 100644 --- a/main/control.c +++ b/main/control.c @@ -14,18 +14,20 @@ #include "freertos/task.h" #include "esp_log.h" +#define MAX_MODES 14 // TODO + static const char *TAG = "CONTROL"; static uint8_t current_animation_mode = 0; // Forward declarations -static void on_mode_change(uint8_t new_mode); +static void on_mode_change(); // Animation mode change callback -static void on_mode_change(uint8_t new_mode) +static void on_mode_change() { - current_animation_mode = new_mode; - animation_set_mode((animation_mode_t)new_mode); + current_animation_mode = (current_animation_mode + 1) % MAX_MODES; + animation_set_mode((animation_mode_t)current_animation_mode); } void control_set_animation_mode(uint8_t mode) @@ -42,11 +44,6 @@ uint8_t control_get_animation_mode(void) return current_animation_mode; } -void control_emulate_pwm_pulse(void) -{ - rcsignal_trigger_mode_change(); -} - // Main initialization esp_err_t control_init(void) { diff --git a/main/localbtn.c b/main/localbtn.c index ede3cb8..b3bda9b 100644 --- a/main/localbtn.c +++ b/main/localbtn.c @@ -16,17 +16,18 @@ static const char *TAG = "LOCALBTN"; uint8_t current_mode; +bool initialized; +TaskHandle_t localbtnTaskhandle; localbtn_mode_change_callback_t callback; -#define BOOT_BTN GPIO_NUM_0 -#define MAX_MODES 14 // TODO: get from control +#define BOOT_BTN GPIO_NUM_0 // TODO: move to config bool boot_button_pressed(void) { return gpio_get_level(BOOT_BTN) == 0; // active LOW } -static void monitor_task(void *arg) +static void localbtn_task(void *arg) { bool lastState = false; while (1) @@ -38,10 +39,6 @@ static void monitor_task(void *arg) { printf("BOOT button pressed\n"); - current_mode = (current_mode + 1) % MAX_MODES; - - ESP_LOGI(TAG, "Mode changed to: %d ", current_mode); - if (callback) { callback(current_mode); @@ -64,13 +61,13 @@ esp_err_t localbtn_init() ESP_ERROR_CHECK(gpio_config(&io_conf)); // Create monitor task - BaseType_t ret = xTaskCreate(monitor_task, "localbtn_monitor", 2048, NULL, 5, NULL); + BaseType_t ret = xTaskCreate(localbtn_task, "localbtn_monitor", 2048, NULL, 5, &localbtnTaskhandle); if (ret != pdPASS) { return ESP_FAIL; } - // TODO: rcsignal.initialized = true; + initialized = true; ESP_LOGI(TAG, "local btn initialized on GPIO%d", BOOT_BTN); return ESP_OK; @@ -78,7 +75,17 @@ esp_err_t localbtn_init() void localbtn_deinit(void) { - // TODO: + if (!initialized) + { + return; + } + + if (localbtnTaskhandle) + { + vTaskDelete(localbtnTaskhandle); + localbtnTaskhandle = NULL; + } + initialized = false; } void localbtn_register_callback(localbtn_mode_change_callback_t cb) diff --git a/main/localbtn.h b/main/localbtn.h index e5a21a1..89f4619 100644 --- a/main/localbtn.h +++ b/main/localbtn.h @@ -13,9 +13,8 @@ /** * @brief Callback function type for mode changes - * @param new_mode New animation mode (0-13) */ -typedef void (*localbtn_mode_change_callback_t)(uint8_t new_mode); +typedef void (*localbtn_mode_change_callback_t)(); /** * @brief Initialize local btn reading diff --git a/main/rcsignal.c b/main/rcsignal.c index ee7fc30..9b9433c 100644 --- a/main/rcsignal.c +++ b/main/rcsignal.c @@ -15,7 +15,7 @@ static const char *TAG = "RCSIGNAL"; -#define MAX_MODES 14 //TODO: Get from config +#define MAX_MODES 14 // TODO: Get from config #define PULSE_THRESHOLD_US 1500 #define SIGNAL_TIMEOUT_MS 100 static struct @@ -99,14 +99,10 @@ static void monitor_task(void *arg) { // Mode change detected rcsignal.pull_detected = false; - rcsignal.current_mode = (rcsignal.current_mode + 1) % MAX_MODES; - - ESP_LOGI(TAG, "Mode changed to: %d (pulse: %lu us)", - rcsignal.current_mode, rcsignal.pulse_width_us); if (rcsignal.callback) { - rcsignal.callback(rcsignal.current_mode); + rcsignal.callback(); } } } @@ -186,17 +182,6 @@ bool rcsignal_is_active(void) return rcsignal.signal_active; } -void rcsignal_trigger_mode_change(void) -{ - rcsignal.current_mode = (rcsignal.current_mode + 1) % MAX_MODES; - ESP_LOGI(TAG, "Manual mode change to: %d", rcsignal.current_mode); - - if (rcsignal.callback) - { - rcsignal.callback(rcsignal.current_mode); - } -} - uint8_t rcsignal_get_current_mode(void) { return rcsignal.current_mode; diff --git a/main/rcsignal.h b/main/rcsignal.h index a0ed1cd..8941112 100644 --- a/main/rcsignal.h +++ b/main/rcsignal.h @@ -13,9 +13,8 @@ /** * @brief Callback function type for mode changes - * @param new_mode New animation mode (0-13) */ -typedef void (*rcsignal_mode_change_callback_t)(uint8_t new_mode); +typedef void (*rcsignal_mode_change_callback_t)(); /** * @brief Initialize RC signal reading @@ -47,11 +46,6 @@ uint32_t rcsignal_get_pulse_width(void); */ bool rcsignal_is_active(void); -/** - * @brief Manually trigger mode change (for emulation) - */ -void rcsignal_trigger_mode_change(void); - /** * @brief Get current mode * @return Current animation mode (0-13)