#pragma once #include "esp_err.h" #include /** * Persistent settings storage (NVS) */ // Default device name (used if none configured) #define SETTINGS_DEFAULT_DEVICE_NAME "ESP32 AirPlay" /** * Initialize settings module (call once at startup) */ esp_err_t settings_init(void); /** * Get saved volume in dB * @param volume_db Output: volume in dB (0 = max, -30 = mute) * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value */ esp_err_t settings_get_volume(float *volume_db); /** * Apply volume (updates cached value and DAC, does NOT write to NVS). * @param volume_db Volume in dB (0 = max, -30 = mute) */ esp_err_t settings_set_volume(float volume_db); /** * Persist the current cached volume to NVS. * Call once at session disconnect rather than on every change. */ esp_err_t settings_persist_volume(void); #ifdef CONFIG_BT_A2DP_ENABLE /** * Get saved Bluetooth volume (AVRC 0-127 scale). * @param volume Output: 0 (mute) to 127 (max) * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value */ esp_err_t settings_get_bt_volume(uint8_t *volume); /** * Update cached Bluetooth volume (does NOT write to NVS). * Caller is responsible for calling dac_set_volume(). * @param volume 0 (mute) to 127 (max) */ esp_err_t settings_set_bt_volume(uint8_t volume); /** * Persist the current cached BT volume to NVS. * Call once at session disconnect rather than on every change. */ esp_err_t settings_persist_bt_volume(void); /** * Get the last connected Bluetooth Device Address (BDA) * @param bda Output array (6 bytes) * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved BDA */ esp_err_t settings_get_last_bt_bda(uint8_t *bda); /** * Set the last connected Bluetooth Device Address (BDA) * @param bda Input array (6 bytes) */ esp_err_t settings_set_last_bt_bda(const uint8_t *bda); /** * Clear the saved Bluetooth Device Address (BDA) */ esp_err_t settings_clear_last_bt_bda(void); #endif /** * Get saved WiFi SSID * @param ssid Output buffer for SSID * @param len Size of SSID buffer * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value */ esp_err_t settings_get_wifi_ssid(char *ssid, size_t len); /** * Get saved WiFi password * @param password Output buffer for password * @param len Size of password buffer * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value */ esp_err_t settings_get_wifi_password(char *password, size_t len); /** * Save WiFi credentials to persistent storage * @param ssid WiFi SSID * @param password WiFi password */ esp_err_t settings_set_wifi_credentials(const char *ssid, const char *password); /** * Clear WiFi credentials from persistent storage */ esp_err_t settings_clear_wifi_credentials(void); /** * Check if WiFi credentials are stored * @return true if credentials exist, false otherwise */ bool settings_has_wifi_credentials(void); /** * Get device name (returns default if none saved) * @param name Output buffer for device name * @param len Size of name buffer * @return ESP_OK (always returns a valid name) */ esp_err_t settings_get_device_name(char *name, size_t len); /** * Save device name to persistent storage * @param name Device name */ esp_err_t settings_set_device_name(const char *name); // ---- LED settings ---- /** * Get saved LED brightness (0–255). Returns compile-time default if not set. */ esp_err_t settings_get_led_brightness(uint8_t *brightness); /** * Save LED brightness (0–255) to persistent storage. */ esp_err_t settings_set_led_brightness(uint8_t brightness); /** * Get saved prompt volume (0–100). */ esp_err_t settings_get_prompt_volume(uint8_t *volume); /** * Save prompt volume (0–100) to persistent storage. */ esp_err_t settings_set_prompt_volume(uint8_t volume); // ---- EQ settings ---- /** Number of EQ bands stored in NVS */ #define SETTINGS_EQ_BANDS 15 /** * Get saved EQ gains. * @param gains_db Output array of SETTINGS_EQ_BANDS floats * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved EQ */ esp_err_t settings_get_eq_gains(float gains_db[SETTINGS_EQ_BANDS]); /** * Save EQ gains to persistent storage. * @param gains_db Array of SETTINGS_EQ_BANDS floats (dB) */ esp_err_t settings_set_eq_gains(const float gains_db[SETTINGS_EQ_BANDS]); /** * Clear saved EQ (revert to flat on next boot). */ esp_err_t settings_clear_eq(void); /** * Check if EQ gains are saved. */ bool settings_has_eq(void);