settings.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #pragma once
  2. #include "esp_err.h"
  3. #include <stdbool.h>
  4. /**
  5. * Persistent settings storage (NVS)
  6. */
  7. // Default device name (used if none configured)
  8. #define SETTINGS_DEFAULT_DEVICE_NAME "ESP32 AirPlay"
  9. /**
  10. * Initialize settings module (call once at startup)
  11. */
  12. esp_err_t settings_init(void);
  13. /**
  14. * Get saved volume in dB
  15. * @param volume_db Output: volume in dB (0 = max, -30 = mute)
  16. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value
  17. */
  18. esp_err_t settings_get_volume(float *volume_db);
  19. /**
  20. * Apply volume (updates cached value and DAC, does NOT write to NVS).
  21. * @param volume_db Volume in dB (0 = max, -30 = mute)
  22. */
  23. esp_err_t settings_set_volume(float volume_db);
  24. /**
  25. * Persist the current cached volume to NVS.
  26. * Call once at session disconnect rather than on every change.
  27. */
  28. esp_err_t settings_persist_volume(void);
  29. #ifdef CONFIG_BT_A2DP_ENABLE
  30. /**
  31. * Get saved Bluetooth volume (AVRC 0-127 scale).
  32. * @param volume Output: 0 (mute) to 127 (max)
  33. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value
  34. */
  35. esp_err_t settings_get_bt_volume(uint8_t *volume);
  36. /**
  37. * Update cached Bluetooth volume (does NOT write to NVS).
  38. * Caller is responsible for calling dac_set_volume().
  39. * @param volume 0 (mute) to 127 (max)
  40. */
  41. esp_err_t settings_set_bt_volume(uint8_t volume);
  42. /**
  43. * Persist the current cached BT volume to NVS.
  44. * Call once at session disconnect rather than on every change.
  45. */
  46. esp_err_t settings_persist_bt_volume(void);
  47. /**
  48. * Get the last connected Bluetooth Device Address (BDA)
  49. * @param bda Output array (6 bytes)
  50. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved BDA
  51. */
  52. esp_err_t settings_get_last_bt_bda(uint8_t *bda);
  53. /**
  54. * Set the last connected Bluetooth Device Address (BDA)
  55. * @param bda Input array (6 bytes)
  56. */
  57. esp_err_t settings_set_last_bt_bda(const uint8_t *bda);
  58. /**
  59. * Clear the saved Bluetooth Device Address (BDA)
  60. */
  61. esp_err_t settings_clear_last_bt_bda(void);
  62. #endif
  63. /**
  64. * Get saved WiFi SSID
  65. * @param ssid Output buffer for SSID
  66. * @param len Size of SSID buffer
  67. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value
  68. */
  69. esp_err_t settings_get_wifi_ssid(char *ssid, size_t len);
  70. /**
  71. * Get saved WiFi password
  72. * @param password Output buffer for password
  73. * @param len Size of password buffer
  74. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved value
  75. */
  76. esp_err_t settings_get_wifi_password(char *password, size_t len);
  77. /**
  78. * Save WiFi credentials to persistent storage
  79. * @param ssid WiFi SSID
  80. * @param password WiFi password
  81. */
  82. esp_err_t settings_set_wifi_credentials(const char *ssid, const char *password);
  83. /**
  84. * Clear WiFi credentials from persistent storage
  85. */
  86. esp_err_t settings_clear_wifi_credentials(void);
  87. /**
  88. * Check if WiFi credentials are stored
  89. * @return true if credentials exist, false otherwise
  90. */
  91. bool settings_has_wifi_credentials(void);
  92. /**
  93. * Get device name (returns default if none saved)
  94. * @param name Output buffer for device name
  95. * @param len Size of name buffer
  96. * @return ESP_OK (always returns a valid name)
  97. */
  98. esp_err_t settings_get_device_name(char *name, size_t len);
  99. /**
  100. * Save device name to persistent storage
  101. * @param name Device name
  102. */
  103. esp_err_t settings_set_device_name(const char *name);
  104. // ---- LED settings ----
  105. /**
  106. * Get saved LED brightness (0–255). Returns compile-time default if not set.
  107. */
  108. esp_err_t settings_get_led_brightness(uint8_t *brightness);
  109. /**
  110. * Save LED brightness (0–255) to persistent storage.
  111. */
  112. esp_err_t settings_set_led_brightness(uint8_t brightness);
  113. /**
  114. * Get saved prompt volume (0–100).
  115. */
  116. esp_err_t settings_get_prompt_volume(uint8_t *volume);
  117. /**
  118. * Save prompt volume (0–100) to persistent storage.
  119. */
  120. esp_err_t settings_set_prompt_volume(uint8_t volume);
  121. // ---- EQ settings ----
  122. /** Number of EQ bands stored in NVS */
  123. #define SETTINGS_EQ_BANDS 15
  124. /**
  125. * Get saved EQ gains.
  126. * @param gains_db Output array of SETTINGS_EQ_BANDS floats
  127. * @return ESP_OK if found, ESP_ERR_NOT_FOUND if no saved EQ
  128. */
  129. esp_err_t settings_get_eq_gains(float gains_db[SETTINGS_EQ_BANDS]);
  130. /**
  131. * Save EQ gains to persistent storage.
  132. * @param gains_db Array of SETTINGS_EQ_BANDS floats (dB)
  133. */
  134. esp_err_t settings_set_eq_gains(const float gains_db[SETTINGS_EQ_BANDS]);
  135. /**
  136. * Clear saved EQ (revert to flat on next boot).
  137. */
  138. esp_err_t settings_clear_eq(void);
  139. /**
  140. * Check if EQ gains are saved.
  141. */
  142. bool settings_has_eq(void);