adding save and battery voltage reading
This commit is contained in:
119
main/system.c
119
main/system.c
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user