adding save and battery voltage reading

This commit is contained in:
2026-01-19 17:42:48 -06:00
parent 3bce9e772c
commit 40bea065a7
7 changed files with 424 additions and 7 deletions

View File

@@ -13,6 +13,8 @@ static EventManager_t _eventManager;
static QueueHandle_t _nvsRequestQueue;
static const char* NVS_NAMESPACE = "bt_devices";
static const char* NVS_KEY_COUNT = "count";
static const char* NVS_NAMESPACE_SETTINGS = "settings";
static const char* NVS_KEY_VOLUME = "volume";
static esp_err_t nvs_load_devices_internal(paired_device_t *devices, size_t *count);
static esp_err_t nvs_save_devices_internal(const paired_device_t *devices, size_t count);
@@ -24,6 +26,9 @@ void system_init(void)
_systemState.pairedDeviceCount = 0;
_systemState.isCharging = false;
_systemState.swapLR = false;
_systemState.volume = 50; // Default volume
_systemState.batteryVoltage_mv = 0;
_systemState.batteryPercentage = 0;
_systemEvent = xEventGroupCreate();
@@ -31,6 +36,9 @@ void system_init(void)
_eventManager.mutex = xSemaphoreCreateMutex();
system_initNvsService();
// Load saved volume from NVS
system_loadVolume();
}
int system_getPrimaryAxis(void)
@@ -75,6 +83,38 @@ bool system_getChargeStatus(void)
return charging;
}
void system_setBatteryVoltage(int voltage_mv)
{
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
_systemState.batteryVoltage_mv = voltage_mv;
xSemaphoreGive(_eventManager.mutex);
}
int system_getBatteryVoltage(void)
{
int voltage;
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
voltage = _systemState.batteryVoltage_mv;
xSemaphoreGive(_eventManager.mutex);
return voltage;
}
void system_setBatteryPercentage(int percentage)
{
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
_systemState.batteryPercentage = percentage;
xSemaphoreGive(_eventManager.mutex);
}
int system_getBatteryPercentage(void)
{
int percentage;
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
percentage = _systemState.batteryPercentage;
xSemaphoreGive(_eventManager.mutex);
return percentage;
}
void system_setSwapLR(bool swap)
{
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
@@ -257,6 +297,85 @@ void system_requestVolumeDown(void) {
system_notifyAll(EM_EVENT_VOLUME_DOWN);
}
void system_setVolume(int volume) {
if (volume < 0) volume = 0;
if (volume > 100) volume = 100;
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
_systemState.volume = volume;
xSemaphoreGive(_eventManager.mutex);
ESP_LOGI("system", "Volume set to %d", volume);
}
int system_getVolume(void) {
int volume;
xSemaphoreTake(_eventManager.mutex, portMAX_DELAY);
volume = _systemState.volume;
xSemaphoreGive(_eventManager.mutex);
return volume;
}
esp_err_t system_saveVolume(void) {
nvs_handle_t nvs_handle;
esp_err_t ret;
int volume = system_getVolume();
ret = nvs_open(NVS_NAMESPACE_SETTINGS, NVS_READWRITE, &nvs_handle);
if (ret != ESP_OK) {
ESP_LOGE("system", "Failed to open NVS namespace for volume write: %s", esp_err_to_name(ret));
return ret;
}
ret = nvs_set_i32(nvs_handle, NVS_KEY_VOLUME, volume);
if (ret != ESP_OK) {
ESP_LOGE("system", "Failed to write volume to NVS: %s", esp_err_to_name(ret));
nvs_close(nvs_handle);
return ret;
}
ret = nvs_commit(nvs_handle);
nvs_close(nvs_handle);
if (ret == ESP_OK) {
ESP_LOGI("system", "Volume %d saved to NVS", volume);
} else {
ESP_LOGE("system", "Failed to commit volume to NVS: %s", esp_err_to_name(ret));
}
return ret;
}
esp_err_t system_loadVolume(void) {
nvs_handle_t nvs_handle;
esp_err_t ret;
int32_t volume = 50; // Default value
ret = nvs_open(NVS_NAMESPACE_SETTINGS, NVS_READONLY, &nvs_handle);
if (ret != ESP_OK) {
ESP_LOGI("system", "No saved volume found, using default: %d", volume);
system_setVolume(volume);
return ESP_OK; // Not an error, just means no saved value
}
ret = nvs_get_i32(nvs_handle, NVS_KEY_VOLUME, &volume);
nvs_close(nvs_handle);
if (ret == ESP_OK) {
ESP_LOGI("system", "Loaded volume from NVS: %d", volume);
system_setVolume(volume);
} else if (ret == ESP_ERR_NVS_NOT_FOUND) {
ESP_LOGI("system", "No saved volume found, using default: %d", volume);
system_setVolume(volume);
ret = ESP_OK; // Not an error
} else {
ESP_LOGE("system", "Failed to read volume from NVS: %s", esp_err_to_name(ret));
}
return ret;
}
void system_initNvsService(void) {
_nvsRequestQueue = xQueueCreate(10, sizeof(nvs_request_t));
if (_nvsRequestQueue == NULL) {