UVControl/src/state.cpp

105 lines
1.8 KiB
C++

#include "state.h"
#include "config.h"
#include <EEPROM.h>
uint16_t ExposureTime = DefaultExposureTime;
uint8_t ExposureIntensity = DefaultExposureIntensity;
uint32_t ExposureTimerStart = 0;
BuzzerSetting Buzzer = BuzzerSetting::CompletedButtonStartup;
uint16_t GetExposureTime()
{
return ExposureTime;
}
void SetExposureTime(uint16_t value)
{
if (value < SmallStep)
ExposureTime = SmallStep;
else
ExposureTime = value;
}
uint8_t GetExposureIntensity()
{
return ExposureIntensity;
}
void SetExposureIntensity(uint8_t value)
{
if (value > 100)
ExposureIntensity = 100;
else if (value < IntensityStep)
ExposureIntensity = IntensityStep;
else
ExposureIntensity = value;
}
BuzzerSetting GetBuzzer()
{
return Buzzer;
}
void SetBuzzer(BuzzerSetting value)
{
Buzzer = value;
}
void LoadSettings()
{
uint16_t offset = 0;
EEPROM.get(offset, ExposureTime);
SetExposureTime(ExposureTime);
offset += sizeof(ExposureTime);
EEPROM.get(offset, ExposureIntensity);
SetExposureIntensity(ExposureIntensity);
offset += sizeof(ExposureIntensity);
EEPROM.get(offset, Buzzer);
if (Buzzer < BuzzerSetting::First || Buzzer > BuzzerSetting::Last)
Buzzer = BuzzerSetting::CompletedButtonStartup;
}
void SaveSettings()
{
uint16_t offset = 0;
EEPROM.put(offset, ExposureTime);
offset += sizeof(ExposureTime);
EEPROM.put(offset, ExposureIntensity);
offset += sizeof(ExposureIntensity);
EEPROM.put(offset, (uint8_t)Buzzer);
}
void StartExposureTimer(uint32_t currentTime)
{
ExposureTimerStart = currentTime;
}
void ResetExposureTimer()
{
ExposureTimerStart = 0;
}
uint16_t GetExposureTimeRemaining(uint32_t currentTime)
{
uint32_t elapsed = (currentTime - ExposureTimerStart);
uint32_t exposureTimeMs = ExposureTime * 1000;
return elapsed <= exposureTimeMs ? exposureTimeMs - elapsed : 0;
}