Added new methods to the ScreenManager class

This commit is contained in:
anschrammh 2019-02-27 23:03:02 +01:00
parent 1e4bb87eae
commit 686bc68aa1
6 changed files with 89 additions and 18 deletions

View File

@ -1,6 +1,6 @@
#include "ScreenManager.h"
ScreenManager::ScreenManager(Adafruit_SSD1306 &display) : _displayRef(display)
ScreenManager::ScreenManager(Adafruit_SSD1306 &display) : _displayRef(display), _displayInverted(false), _displayDimmed(false), _currentView(NULL)
{
_viewLinkedList = (ViewLinkedList) createEmptyList();
}
@ -113,4 +113,56 @@ void ScreenManager::iterateThroughList()
}
}
ViewLink* ScreenManager::getLinkByUID(ViewLinkedList viewLinkedList, const unsigned char UID)
{
if(isListEmpty(viewLinkedList))
return NULL;
while(!isListEmpty(viewLinkedList))
{
if(viewLinkedList->UID == UID)return viewLinkedList;
viewLinkedList = viewLinkedList->next;
}
return NULL;
}
boolean ScreenManager::displayView(const int UID)
{
if(UID == -1 && _currentView == NO_CURRENT_VIEW)
{
//We display an error message on the screen
return false;
}
else if(UID == -1)
return (*_currentView->viewLogicFunction)(_displayRef, _currentView->pData);
ViewLink *viewLink = getLinkByUID(_viewLinkedList, UID);
if(viewLink == NULL)
{
//We display an error message on the screen
return false;
}else if(viewLink->viewLogicFunction == NULL)
{
//We display an error message on the screen
return false;
}
_currentView = viewLink;
return (*viewLink->viewLogicFunction)(_displayRef, viewLink->pData);
}
void ScreenManager::invertDisplay(boolean inverted)
{
_displayRef.invertDisplay(inverted);
_displayInverted = inverted;
}
void ScreenManager::dimDisplay(boolean dimmed)
{
_displayRef.dim(dimmed);
_displayDimmed = dimmed;
}

View File

@ -9,7 +9,14 @@ class ScreenManager
public:
boolean addView(boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*), void *pData, const unsigned char UID);
boolean removeView(const unsigned char UID);
boolean displayView(const int UID = -1);
void invertDisplay(boolean inverted);
void dimDisplay(boolean dimmed);
unsigned char getError() const;
boolean isDisplayInverted() const;
boolean isDisplayDimmed() const;
ViewLink* getCurrentView() const;
void iterateThroughList();
@ -20,11 +27,15 @@ class ScreenManager
void *createEmptyList();
boolean addNewLinkAtTheEnd(ViewLinkedList *viewLinkedList, ViewLink viewLink);
boolean removeLinkByUID(ViewLinkedList *viewLinkedList, const unsigned char UID);
ViewLink* getLinkByUID(ViewLinkedList viewLinkedList, const unsigned char UID);
boolean isListEmpty(ViewLinkedList viewLinkedList);
Adafruit_SSD1306 &_displayRef;
ViewLinkedList _viewLinkedList;
unsigned char _error;
boolean _displayInverted;
boolean _displayDimmed;
ViewLink* _currentView;
};
#endif //SCREENMANAGER_H

View File

@ -6,29 +6,26 @@
SAB sab;
int i = 42;
void setup() {
// put your setup code here, to run once:
Serial.println("Starting");
sab.getScreenManager().addView(&(view_1), NULL,9);
sab.getScreenManager().addView(&(view_1), NULL, 3);
sab.getScreenManager().addView(&(view_1), NULL, 6);
sab.getScreenManager().addView(&(view_1), &i,1);
sab.getScreenManager().addView(&(view_2), NULL, 2);
/*sab.getScreenManager().addView(&(view_1), NULL, 6);
sab.getScreenManager().addView(&(view_1), NULL, 7);
sab.getScreenManager().iterateThroughList();
sab.getScreenManager().iterateThroughList();*/
Serial.println("fin");
}
void loop() {
sab.getScreenManager().addView(&(view_1), NULL, 7);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().addView(&(view_1), NULL, 3);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().addView(&(view_1), NULL, 6);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().removeView(6);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().removeView(7);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().removeView(3);
Serial.println(ESP.getFreeHeap());
sab.getScreenManager().iterateThroughList();
sab.getScreenManager().displayView(2);
sab.getScreenManager().displayView(LAST_VIEW);
sab.getScreenManager().displayView(3);
sab.getScreenManager().displayView(1);
sab.getScreenManager().displayView(LAST_VIEW);
Serial.print("Free memory : ");Serial.println(ESP.getFreeHeap());
delay(3000);
}

View File

@ -24,6 +24,9 @@ typedef enum { GPIO_0 = 0,
#define MALLOC_ERR B00000001
#define NO_CURRENT_VIEW NULL
#define LAST_VIEW -1
//Data structure for the view handling
typedef struct viewLink{
boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*);

View File

@ -2,6 +2,12 @@
boolean view_1(Adafruit_SSD1306 &display, void *pData)
{
display.clearDisplay();
int *i = (int *) pData;
Serial.print("Value : ");Serial.println(*i);
}
boolean view_2(Adafruit_SSD1306 &display, void *pData)
{
Serial.println("Salut ma gueule");
}

View File

@ -4,4 +4,6 @@
boolean view_1(Adafruit_SSD1306 &display, void *pData);
boolean view_2(Adafruit_SSD1306 &display, void *pData);
#endif //VIEWS_H