Added new methods to the ScreenManager class
This commit is contained in:
parent
1e4bb87eae
commit
686bc68aa1
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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*);
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -4,4 +4,6 @@
|
||||
|
||||
boolean view_1(Adafruit_SSD1306 &display, void *pData);
|
||||
|
||||
boolean view_2(Adafruit_SSD1306 &display, void *pData);
|
||||
|
||||
#endif //VIEWS_H
|
||||
|
Loading…
Reference in New Issue
Block a user