This commit is contained in:
2026-01-06 12:13:55 +01:00
parent 0dd26fdcde
commit d33bda52d0
6 changed files with 22 additions and 20 deletions

View File

@ -11,6 +11,7 @@
#include "esp_system.h" #include "esp_system.h"
#include "nvs_flash.h" #include "nvs_flash.h"
#include "nvs.h" #include "nvs.h"
#include "soc/gpio_num.h"
#include <string.h> #include <string.h>
@ -26,6 +27,7 @@ static const char *TAG = "CONFIG";
#define HARDCODED_CONFIG_LED_STRIP_A_COUNT 7U #define HARDCODED_CONFIG_LED_STRIP_A_COUNT 7U
#define HARDCODED_CONFIG_LED_STRIP_B_COUNT 7U #define HARDCODED_CONFIG_LED_STRIP_B_COUNT 7U
#define HARDCODED_CONFIG_PWM_PIN 13U #define HARDCODED_CONFIG_PWM_PIN 13U
#define HARDCODED_CONFIG_LOCALBTN_PIN GPIO_NUM_0
#endif #endif
// Global state // Global state
@ -35,6 +37,7 @@ static config_t current_config = {
.led_count_strip_a = -1, .led_count_strip_a = -1,
.led_count_strip_b = -1, .led_count_strip_b = -1,
.pwm_pin = -1, .pwm_pin = -1,
.localBtn_pin = -1,
.magic = CONFIG_MAGIC}; .magic = CONFIG_MAGIC};
// NVS Functions // 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, "Loaded config from NVS");
ESP_LOGI(TAG, " Strip A: GPIO%d", current_config.led_pin_strip_a); 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 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, " PWM Pin: GPIO%d", current_config.pwm_pin);
ESP_LOGI(TAG, " Local btn Pin: GPIO%d", current_config.localBtn_pin);
return ESP_OK; 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_a = -1;
current_config.led_count_strip_b = -1; current_config.led_count_strip_b = -1;
current_config.pwm_pin = -1; current_config.pwm_pin = -1;
current_config.localBtn_pin = -1;
current_config.magic = CONFIG_MAGIC; current_config.magic = CONFIG_MAGIC;
return save_config_to_nvs(); 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_a = current_config.led_count_strip_a;
cnf->led_count_strip_b = current_config.led_count_strip_b; cnf->led_count_strip_b = current_config.led_count_strip_b;
cnf->pwm_pin = current_config.pwm_pin; cnf->pwm_pin = current_config.pwm_pin;
cnf->localBtn_pin = current_config.localBtn_pin;
} }
esp_err_t config_update_config(const config_t *config) 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 // Reinitialize if pins changed
bool pins_changed = (current_config.led_pin_strip_a != config->led_pin_strip_a) || 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.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(&current_config, config, sizeof(config_t)); memcpy(&current_config, config, sizeof(config_t));
esp_err_t err = save_config_to_nvs(); 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_a = HARDCODED_CONFIG_LED_STRIP_A_COUNT;
current_config.led_count_strip_b = HARDCODED_CONFIG_LED_STRIP_B_COUNT; current_config.led_count_strip_b = HARDCODED_CONFIG_LED_STRIP_B_COUNT;
current_config.pwm_pin = HARDCODED_CONFIG_PWM_PIN; current_config.pwm_pin = HARDCODED_CONFIG_PWM_PIN;
current_config.localBtn_pin = HARDCODED_CONFIG_LOCALBTN_PIN;
current_config.magic = CONFIG_MAGIC; current_config.magic = CONFIG_MAGIC;
save_config_to_nvs(); save_config_to_nvs();

View File

@ -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_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 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 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 uint32_t magic; // Magic number to validate config (0xDEADBEEF) //TODO: use sha256
} config_t; } config_t;

View File

@ -88,7 +88,7 @@ esp_err_t control_init(void)
} }
// Initialize local BTN // Initialize local BTN
ret = localbtn_init(); ret = localbtn_init(current_config.localBtn_pin);
if (ret != ESP_OK) if (ret != ESP_OK)
{ {
ESP_LOGE(TAG, "Local BTN init failed: %s", esp_err_to_name(ret)); ESP_LOGE(TAG, "Local BTN init failed: %s", esp_err_to_name(ret));

View File

@ -10,34 +10,27 @@
#include "esp_log.h" #include "esp_log.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/task.h" #include "freertos/task.h"
#include "soc/gpio_num.h"
#include <string.h> #include <string.h>
static const char *TAG = "LOCALBTN"; static const char *TAG = "LOCALBTN";
uint8_t current_mode; uint8_t current_mode;
int8_t current_localBtnPin;
bool initialized; bool initialized;
TaskHandle_t localbtnTaskhandle; TaskHandle_t localbtnTaskhandle;
localbtn_mode_change_callback_t callback; 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) static void localbtn_task(void *arg)
{ {
bool lastState = false; bool lastState = false;
while (1) 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)) if ((currentState) && (lastState != currentState))
{ {
printf("BOOT button pressed\n"); ESP_LOGI(TAG, "Local button pressed");
if (callback) 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 = { gpio_config_t io_conf = {
.pin_bit_mask = 1ULL << BOOT_BTN, .pin_bit_mask = 1ULL << current_localBtnPin,
.mode = GPIO_MODE_INPUT, .mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE, // safe even if external pull-up exists .pull_up_en = GPIO_PULLUP_ENABLE, // safe even if external pull-up exists
.pull_down_en = GPIO_PULLDOWN_DISABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE,
@ -61,14 +54,14 @@ esp_err_t localbtn_init()
ESP_ERROR_CHECK(gpio_config(&io_conf)); ESP_ERROR_CHECK(gpio_config(&io_conf));
// Create monitor task // 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) if (ret != pdPASS)
{ {
return ESP_FAIL; return ESP_FAIL;
} }
initialized = true; 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; return ESP_OK;
} }

View File

@ -20,7 +20,7 @@ typedef void (*localbtn_mode_change_callback_t)();
* @brief Initialize local btn reading * @brief Initialize local btn reading
* @return ESP_OK on success * @return ESP_OK on success
*/ */
esp_err_t localbtn_init(); esp_err_t localbtn_init(int8_t pin_localbtn);
/** /**
* @brief Deinitialize local btn reading * @brief Deinitialize local btn reading

View File

@ -15,7 +15,6 @@
static const char *TAG = "RCSIGNAL"; static const char *TAG = "RCSIGNAL";
#define MAX_MODES 14 // TODO: Get from config
#define PULSE_THRESHOLD_US 1500 #define PULSE_THRESHOLD_US 1500
#define SIGNAL_TIMEOUT_MS 100 #define SIGNAL_TIMEOUT_MS 100
static struct static struct