Reworked the auto off implementation as well as changed the way the screen config parameters are applied from the SDCard

This commit is contained in:
Th3maz1ng 2022-04-24 17:35:15 +02:00
parent a950b5b28e
commit f96ccfd8a1
2 changed files with 74 additions and 38 deletions

View File

@ -31,32 +31,29 @@ boolean ScreenManager::applyCfgFromSD()
setDefault();
return false;
}
if(cfgDictionary->get("ENABLED") != NULL)
setEnabled(cfgDictionary->get("ENABLED")->booleanValue());
if( cfgDictionary->get("ENABLED") != NULL &&
cfgDictionary->get("DIMMED") != NULL &&
cfgDictionary->get("INVERTED") != NULL &&
cfgDictionary->get("ORIENTATION") != NULL &&
cfgDictionary->get("AUTO_OFF") != NULL)
{
setEnabled(cfgDictionary->get("ENABLED")->booleanValue());
_displayRef.setRotation(orientationTranslator(cfgDictionary->get("ORIENTATION")->intValue()));
_displayRef.invertDisplay(cfgDictionary->get("INVERTED")->booleanValue());
_displayRef.dim(cfgDictionary->get("DIMMED")->booleanValue());
_displayRef.setTextColor(WHITE);
setAutoOFFDelay(cfgDictionary->get("AUTO_OFF")->uintValue());
delete cfgDictionary;
return true;
}
else //Default value applied
{
setDefault();
delete cfgDictionary;
return false;
}
if(cfgDictionary->get("DIMMED") != NULL)
_displayRef.dim(cfgDictionary->get("DIMMED")->booleanValue());
if(cfgDictionary->get("INVERTED") != NULL)
_displayRef.invertDisplay(cfgDictionary->get("INVERTED")->booleanValue());
if(cfgDictionary->get("ORIENTATION") != NULL)
_displayRef.setRotation(orientationTranslator(cfgDictionary->get("ORIENTATION")->intValue()));
else
_displayRef.setRotation(OR_0);
if(cfgDictionary->get("AUTO_OFF") != NULL)
setAutoOFFDelay(cfgDictionary->get("AUTO_OFF")->uintValue());
_displayRef.setTextColor(WHITE);
delete cfgDictionary;
return true;
}
else //Default value applied
else //Default values applied
{
setDefault();
return true;
@ -211,14 +208,18 @@ ScreenManager::ViewLink* ScreenManager::getLinkByUID(ViewLinkedList viewLinkedLi
void ScreenManager::run()
{
if(!_enabled) return;
//We handle the auto off logic here
if(_autoOFFDelay && _enabled)
if(_autoOFFDelay)
{
if(millis() - _autoOFFDelayRef > _autoOFFDelay)
setEnabled(false);
if(millis() - _autoOFFDelayRef >= _autoOFFDelay)
{
sleep();
return;
}
}
if((millis() - _timeRef < _refreshInterval && !_forceRefresh) || !_enabled) return;
if(millis() - _timeRef < _refreshInterval && !_forceRefresh) return;
_timeRef = millis();
@ -268,8 +269,13 @@ void ScreenManager::forceRefresh()
boolean ScreenManager::displayView(const uint8_t UID)
{
_autoOFFDelayRef = millis();
if(!_enabled) return false;
if(isSleeping())
wakeUp();
_autoOFFDelayRef = millis(); //Resets the auto off delay so the screen do not sleep on us.
_forceRefresh = true;
ViewLink *viewLink = getLinkByUID(_viewLinkedList, UID);
@ -297,8 +303,16 @@ boolean ScreenManager::displayView(const uint8_t UID)
boolean ScreenManager::displayNextView()
{
_autoOFFDelayRef = millis();
if(!_enabled) return false;
if(isSleeping())
{
wakeUp();
return true;
}
_autoOFFDelayRef = millis(); //Resets the auto off delay so the screen do not sleep on us.
_forceRefresh = true;
_error = OK;
if(isListEmpty(_viewLinkedList))return false;
@ -333,8 +347,16 @@ boolean ScreenManager::displayNextView()
boolean ScreenManager::displayPreviousView()
{
_autoOFFDelayRef = millis();
if(!_enabled) return false;
if(isSleeping())
{
wakeUp();
return true;
}
_autoOFFDelayRef = millis(); //Resets the auto off delay so the screen do not sleep on us.
_forceRefresh = true;
_error = OK;
if(isListEmpty(_tail))return false;
@ -381,13 +403,17 @@ void ScreenManager::dimDisplay(const boolean dimmed)
void ScreenManager::sleep()
{
_enabled = false;
if(!_enabled || _sleeping)return;
_sleeping = true;
_displayRef.sleep();
}
void ScreenManager::wakeUp()
{
_enabled = true;
if(!_enabled || !_sleeping)return;
_sleeping = false;
_autoOFFDelayRef = millis();
_displayRef.wakeUp();
}
@ -414,6 +440,7 @@ boolean ScreenManager::isDisplayDimmed() const
void ScreenManager::clearDisplay(const boolean bufferOnly)
{
if(!_enabled) return;
if(bufferOnly)
_displayRef.clearDisplay();
else
@ -439,10 +466,11 @@ void ScreenManager::clearViews()
void ScreenManager::setEnabled(boolean value)
{
_enabled = value;
if(value)
wakeUp();
_displayRef.wakeUp();
else
sleep();
_displayRef.sleep();
}
void ScreenManager::setAutoOFFDelay(const uint64_t delay)
@ -450,11 +478,16 @@ void ScreenManager::setAutoOFFDelay(const uint64_t delay)
_autoOFFDelay = delay;
}
boolean ScreenManager::getEnabled()
boolean ScreenManager::isEnabled() const
{
return _enabled;
}
boolean ScreenManager::isSleeping() const
{
return _sleeping;
}
unsigned char ScreenManager::getViewCount()
{
unsigned char counter = 0;

View File

@ -38,8 +38,10 @@ class ScreenManager
void sleep();
void wakeUp();
void setEnabled(boolean value);
void setAutoOFFDelay(const uint64_t delay);
boolean getEnabled();
// Default value is 0 : this disables auto off
void setAutoOFFDelay(const uint64_t delay = 0);
boolean isEnabled() const;
boolean isSleeping() const;
boolean init();
void run();
@ -72,6 +74,7 @@ class ScreenManager
boolean _displayColorInverted = false;
boolean _displayDimmed = false;
boolean _enabled = true;
boolean _sleeping = false;
uint8_t _refreshRateHz = 1;
uint16_t _refreshInterval = 1000;
uint64_t _timeRef = 0, _autoOFFDelayRef = 0, _autoOFFDelay = 0;