diff --git a/main/config.c b/main/config.c index 3f17611..244b4d6 100644 --- a/main/config.c +++ b/main/config.c @@ -11,6 +11,7 @@ #include "esp_system.h" #include "nvs_flash.h" #include "nvs.h" +#include "soc/gpio_num.h" #include @@ -26,6 +27,7 @@ static const char *TAG = "CONFIG"; #define HARDCODED_CONFIG_LED_STRIP_A_COUNT 7U #define HARDCODED_CONFIG_LED_STRIP_B_COUNT 7U #define HARDCODED_CONFIG_PWM_PIN 13U +#define HARDCODED_CONFIG_LOCALBTN_PIN GPIO_NUM_0 #endif // Global state @@ -35,6 +37,7 @@ static config_t current_config = { .led_count_strip_a = -1, .led_count_strip_b = -1, .pwm_pin = -1, + .localBtn_pin = -1, .magic = CONFIG_MAGIC}; // NVS Functions @@ -61,7 +64,10 @@ static esp_err_t load_config_from_nvs(void) ESP_LOGI(TAG, "Loaded config from NVS"); ESP_LOGI(TAG, " Strip A: GPIO%d", current_config.led_pin_strip_a); ESP_LOGI(TAG, " Strip B: GPIO%d", current_config.led_pin_strip_b); + ESP_LOGI(TAG, " Strip A LED count: %d", current_config.led_count_strip_a); + ESP_LOGI(TAG, " Strip B LED count: %d", current_config.led_count_strip_b); ESP_LOGI(TAG, " PWM Pin: GPIO%d", current_config.pwm_pin); + ESP_LOGI(TAG, " Local btn Pin: GPIO%d", current_config.localBtn_pin); return ESP_OK; } @@ -103,6 +109,7 @@ esp_err_t config_reset_config(void) current_config.led_count_strip_a = -1; current_config.led_count_strip_b = -1; current_config.pwm_pin = -1; + current_config.localBtn_pin = -1; current_config.magic = CONFIG_MAGIC; return save_config_to_nvs(); @@ -115,6 +122,7 @@ void config_get_config(config_t *const cnf) cnf->led_count_strip_a = current_config.led_count_strip_a; cnf->led_count_strip_b = current_config.led_count_strip_b; cnf->pwm_pin = current_config.pwm_pin; + cnf->localBtn_pin = current_config.localBtn_pin; } esp_err_t config_update_config(const config_t *config) @@ -127,7 +135,7 @@ esp_err_t config_update_config(const config_t *config) // Reinitialize if pins changed bool pins_changed = (current_config.led_pin_strip_a != config->led_pin_strip_a) || (current_config.led_pin_strip_b != config->led_pin_strip_b) || - (current_config.pwm_pin != config->pwm_pin); + (current_config.pwm_pin != config->pwm_pin); // TODO: Count? LocalBtn? Needed? memcpy(¤t_config, config, sizeof(config_t)); esp_err_t err = save_config_to_nvs(); @@ -164,6 +172,7 @@ esp_err_t config_init(void) current_config.led_count_strip_a = HARDCODED_CONFIG_LED_STRIP_A_COUNT; current_config.led_count_strip_b = HARDCODED_CONFIG_LED_STRIP_B_COUNT; current_config.pwm_pin = HARDCODED_CONFIG_PWM_PIN; + current_config.localBtn_pin = HARDCODED_CONFIG_LOCALBTN_PIN; current_config.magic = CONFIG_MAGIC; save_config_to_nvs(); diff --git a/main/config.h b/main/config.h index 1788ff7..d5627b0 100644 --- a/main/config.h +++ b/main/config.h @@ -21,6 +21,7 @@ typedef struct int8_t led_count_strip_a; // LED count for LED strip A (-1 = not configured) int8_t led_count_strip_b; // LED count for LED strip B (-1 = not configured) int8_t pwm_pin; // GPIO pin for PWM input (-1 = not configured) + int8_t localBtn_pin; // GPIO pin for local btn input (-1 = not configured) uint32_t magic; // Magic number to validate config (0xDEADBEEF) //TODO: use sha256 } config_t; diff --git a/main/control.c b/main/control.c index bac154c..e10e02c 100644 --- a/main/control.c +++ b/main/control.c @@ -88,7 +88,7 @@ esp_err_t control_init(void) } // Initialize local BTN - ret = localbtn_init(); + ret = localbtn_init(current_config.localBtn_pin); if (ret != ESP_OK) { ESP_LOGE(TAG, "Local BTN init failed: %s", esp_err_to_name(ret)); diff --git a/main/localbtn.c b/main/localbtn.c index b3bda9b..429c284 100644 --- a/main/localbtn.c +++ b/main/localbtn.c @@ -10,34 +10,27 @@ #include "esp_log.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "soc/gpio_num.h" #include static const char *TAG = "LOCALBTN"; uint8_t current_mode; +int8_t current_localBtnPin; bool initialized; TaskHandle_t localbtnTaskhandle; localbtn_mode_change_callback_t callback; -#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 localbtn_task(void *arg) { bool lastState = false; while (1) { - vTaskDelay(pdMS_TO_TICKS(10)); + vTaskDelay(pdMS_TO_TICKS(100)); // TODO:Get btn state via interrupt instead of polling - bool currentState = boot_button_pressed(); + bool currentState = (gpio_get_level(current_localBtnPin) == 0); if ((currentState) && (lastState != currentState)) { - printf("BOOT button pressed\n"); + ESP_LOGI(TAG, "Local button pressed"); if (callback) { @@ -49,11 +42,11 @@ static void localbtn_task(void *arg) } } -esp_err_t localbtn_init() +esp_err_t localbtn_init(int8_t pin_localbtn) { - + current_localBtnPin = pin_localbtn; gpio_config_t io_conf = { - .pin_bit_mask = 1ULL << BOOT_BTN, + .pin_bit_mask = 1ULL << current_localBtnPin, .mode = GPIO_MODE_INPUT, .pull_up_en = GPIO_PULLUP_ENABLE, // safe even if external pull-up exists .pull_down_en = GPIO_PULLDOWN_DISABLE, @@ -61,14 +54,14 @@ esp_err_t localbtn_init() ESP_ERROR_CHECK(gpio_config(&io_conf)); // Create monitor task - BaseType_t ret = xTaskCreate(localbtn_task, "localbtn_monitor", 2048, NULL, 5, &localbtnTaskhandle); + BaseType_t ret = xTaskCreate(localbtn_task, "localbtn_task", 2048, NULL, 5, &localbtnTaskhandle); if (ret != pdPASS) { return ESP_FAIL; } initialized = true; - ESP_LOGI(TAG, "local btn initialized on GPIO%d", BOOT_BTN); + ESP_LOGI(TAG, "local btn initialized on GPIO%d", current_localBtnPin); return ESP_OK; } diff --git a/main/localbtn.h b/main/localbtn.h index 89f4619..0b87671 100644 --- a/main/localbtn.h +++ b/main/localbtn.h @@ -20,7 +20,7 @@ typedef void (*localbtn_mode_change_callback_t)(); * @brief Initialize local btn reading * @return ESP_OK on success */ -esp_err_t localbtn_init(); +esp_err_t localbtn_init(int8_t pin_localbtn); /** * @brief Deinitialize local btn reading diff --git a/main/rcsignal.c b/main/rcsignal.c index 9b9433c..724d23d 100644 --- a/main/rcsignal.c +++ b/main/rcsignal.c @@ -15,7 +15,6 @@ static const char *TAG = "RCSIGNAL"; -#define MAX_MODES 14 // TODO: Get from config #define PULSE_THRESHOLD_US 1500 #define SIGNAL_TIMEOUT_MS 100 static struct