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