Compare commits

..

No commits in common. "80ed2f2080501c0892e04fe81e196bc1d81fd02e" and "ca819f0e9382a2c5d83241edefcb2798196ce7e8" have entirely different histories.

12 changed files with 146 additions and 265 deletions

View File

@ -138,11 +138,3 @@ unsigned char SAB::getError() const
{ {
return _error; return _error;
} }
void SAB::run()
{
_webServer.run();
_ftpServer.run();
_taskSchedulerManager.run();
_screenManager.run();
}

View File

@ -41,7 +41,6 @@ class SAB
PowerManager& getPowerManager(); PowerManager& getPowerManager();
TimeSpan getUpTime(); TimeSpan getUpTime();
BoardConfig getBoardConfig() const; BoardConfig getBoardConfig() const;
void run();
const char *getSoftVersion() const; const char *getSoftVersion() const;
unsigned char getError() const; unsigned char getError() const;

View File

@ -1,8 +1,6 @@
#include "ScreenManager.h" #include "ScreenManager.h"
ScreenManager::ScreenManager(Adafruit_SSD1306 &display, SDCardManager *sdCardManager) : _displayRef(display), _error(OK) ScreenManager::ScreenManager(Adafruit_SSD1306 &display, SDCardManager *sdCardManager) : _displayRef(display), _displayColorInverted(false), _displayDimmed(false), _enabled(true), _currentView(NO_CURRENT_VIEW), _error(OK)
, _displayColorInverted(false), _displayDimmed(false), _enabled(true), _refreshRateHz(1), _refreshInterval(1000), _timeRef(0),_forceRefresh(false)
, _currentView(NO_CURRENT_VIEW), _tail(NULL)
, _viewNotFound{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL} , _viewNotFound{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL}
, _viewFuncUndefined{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL} , _viewFuncUndefined{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL}
, _currentViewUndefined{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL} , _currentViewUndefined{&(displayError), (ErrorInfo *)malloc(sizeof(ErrorInfo)), RESERVED_VIEW_UID, NULL}
@ -10,10 +8,6 @@ ScreenManager::ScreenManager(Adafruit_SSD1306 &display, SDCardManager *sdCardMan
,_sdCardManager(sdCardManager) ,_sdCardManager(sdCardManager)
{ {
_viewLinkedList = (ViewLinkedList) createEmptyList(); _viewLinkedList = (ViewLinkedList) createEmptyList();
//We set the error messages :
((ErrorInfo *)_viewNotFound.pData)->errorMessage = FPSTR("View does not exist");
((ErrorInfo *)_viewFunctionFailedToExecute.pData)->errorMessage = FPSTR("View function failed\nto execute");
((ErrorInfo *)_viewFuncUndefined.pData)->errorMessage = FPSTR("View function is NULL");
} }
boolean ScreenManager::init() boolean ScreenManager::init()
@ -72,8 +66,8 @@ void ScreenManager::setDefault()
boolean ScreenManager::addView(boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*), void *pData, const unsigned char UID) boolean ScreenManager::addView(boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*), void *pData, const unsigned char UID)
{ {
ViewLink viewLink ={viewLogicFunction, pData, UID, NULL, NULL}; ViewLink viewLink ={viewLogicFunction, pData, UID, NULL};
return addNewLinkAtTheEnd(&_viewLinkedList, viewLink); addNewLinkAtTheEnd(&_viewLinkedList, viewLink);
} }
void *ScreenManager::createEmptyList() void *ScreenManager::createEmptyList()
@ -93,48 +87,33 @@ boolean ScreenManager::addNewLinkAtTheEnd(ViewLinkedList *viewLinkedList, ViewLi
//Because of the const member //Because of the const member
memcpy(newViewLink, &viewLink, sizeof(*newViewLink)); memcpy(newViewLink, &viewLink, sizeof(*newViewLink));
//If this is the first link if(isListEmpty(*viewLinkedList))*viewLinkedList = newViewLink;
if(isListEmpty(*viewLinkedList)) else
{ {
//The link list points to the first link (aka the head) if((*viewLinkedList)->UID == newViewLink->UID)
{
ViewLink *link = *viewLinkedList;
*viewLinkedList = newViewLink; *viewLinkedList = newViewLink;
//The previous pointer is still NULL; newViewLink->next = link->next;
//The _tail pointer is the same as the head one. free(link);
_tail = *viewLinkedList;
}
else //If there are some links already
{
ViewLinkedList *cursor = viewLinkedList;
ViewLink *previousLink = NULL;
while(*cursor != NULL)
{
previousLink = *cursor;
//We check if the UID already exists, if yes we replace the link
if((*cursor)->UID == newViewLink->UID)
{
ViewLink *toDelete = *cursor;
*cursor = newViewLink;
newViewLink->next = toDelete->next;
newViewLink->previous = toDelete->previous;
//We check if the link as a next link registered
if(toDelete->next != NULL)
{
//We update it's previous link since it's going to be deleted
toDelete->next->previous = newViewLink;
}
//We do not forget to check if the link replaced is also the tail, in this case, we must update the tail
if(_tail == toDelete)_tail = newViewLink;
free(toDelete);
return true; return true;
} }
cursor = &(*cursor)->next;
ViewLinkedList cursor = *viewLinkedList;
while(cursor->next != NULL)
{
if(cursor->next->UID == newViewLink->UID)
{
ViewLink *link = cursor->next;
cursor->next = newViewLink;
newViewLink->next = link->next;
free(link);
return true;
} }
newViewLink->previous = previousLink; cursor = cursor->next;
*cursor = newViewLink; }
//We need to update the tail cursor->next = newViewLink;
_tail = newViewLink;
} }
return true; return true;
@ -149,28 +128,25 @@ boolean ScreenManager::removeLinkByUID(ViewLinkedList *viewLinkedList, const uns
{ {
if(isListEmpty(*viewLinkedList))return false; if(isListEmpty(*viewLinkedList))return false;
ViewLinkedList *cursor = viewLinkedList; if((*viewLinkedList)->UID == UID)
while(*cursor != NULL)
{ {
//We check if this is the link we want to delete ViewLink *tmp = *viewLinkedList;
if((*cursor)->UID == UID) *viewLinkedList = (*viewLinkedList)->next;
{ free(tmp);
ViewLink *toDelete = *cursor;
*cursor = (*cursor)->next;
if(toDelete->next != NULL)
{
//We update the previous link of the next member since it's going to be deleted
toDelete->next->previous = toDelete->previous;
}
//We also update the tail if the link we delete was the tail
if(_tail == toDelete)_tail = toDelete->previous;
free(toDelete);
return true; return true;
} }
cursor = &(*cursor)->next;
ViewLinkedList cursor = *viewLinkedList;
while(!isListEmpty(cursor->next))
{
if(cursor->next->UID == UID)
{
ViewLink *tmp = cursor->next;
cursor->next = cursor->next->next;
free(tmp);
return true;
}
cursor = cursor->next;
} }
return false; return false;
} }
@ -210,135 +186,119 @@ ViewLink* ScreenManager::getLinkByUID(ViewLinkedList viewLinkedList, const unsig
return NULL; return NULL;
} }
void ScreenManager::run() boolean ScreenManager::displayView(const int UID)
{
if((millis() - _timeRef < _refreshInterval && !_forceRefresh) || !_enabled) return;
_timeRef = millis();
if(((_error == OK || _error == VIEW_FAILED_TO_EXECUTE) || _forceRefresh) && _currentView != NO_CURRENT_VIEW)
{ {
if(!_enabled) return true;
//Reset draw settings:
_displayRef.clearDisplay(); _displayRef.clearDisplay();
_displayRef.setCursor(0,0); _displayRef.setCursor(0,0);
_displayRef.setTextSize(1); _displayRef.setTextSize(1);
switch(_error)
if(UID == -1 && _currentView == NO_CURRENT_VIEW)
{ {
case OK: //We display an error message on the screen
case VIEW_FAILED_TO_EXECUTE: ((ErrorInfo *)_currentViewUndefined.pData)->errorMessage = FPSTR("Could not display current view");
if(!(*_currentView->viewLogicFunction)(_displayRef, _currentView->pData)) ((ErrorInfo *)_currentViewUndefined.pData)->viewUID = UID;
(*_currentViewUndefined.viewLogicFunction)(_displayRef, _currentViewUndefined.pData);
_displayRef.display();
_error = CURRENT_VIEW_UNDEFINED;
return false;
}
else if(UID == -1)
{ {
if(_currentView->viewLogicFunction == NULL)
{
//We display an error message on the screen
((ErrorInfo *)_viewFuncUndefined.pData)->errorMessage = FPSTR("View function is NULL");
((ErrorInfo *)_viewFuncUndefined.pData)->viewUID = _currentView->UID;
(*_viewFuncUndefined.viewLogicFunction)(_displayRef, _viewFuncUndefined.pData);
_displayRef.display();
_error = VIEW_FUNC_UNDEFINED;
return false;
}
else if(!(*_currentView->viewLogicFunction)(_displayRef, _currentView->pData))
{
//We display an error message on the screen
_displayRef.clearDisplay(); _displayRef.clearDisplay();
//Error while executing the view function ((ErrorInfo *)_viewFunctionFailedToExecute.pData)->errorMessage = FPSTR("View function failed\nto execute");
((ErrorInfo *)_viewFunctionFailedToExecute.pData)->viewUID = _currentView->UID; ((ErrorInfo *)_viewFunctionFailedToExecute.pData)->viewUID = _currentView->UID;
(*_viewFunctionFailedToExecute.viewLogicFunction)(_displayRef, _viewFunctionFailedToExecute.pData); (*_viewFunctionFailedToExecute.viewLogicFunction)(_displayRef, _viewFunctionFailedToExecute.pData);
_displayRef.display();
_error = VIEW_FAILED_TO_EXECUTE; _error = VIEW_FAILED_TO_EXECUTE;
return false;
} }
else
_error = OK; _error = OK;
break;
case VIEW_NOT_FOUND:
(*_viewNotFound.viewLogicFunction)(_displayRef, _viewNotFound.pData);
break;
case VIEW_FUNC_UNDEFINED:
(*_viewFuncUndefined.viewLogicFunction)(_displayRef, _viewFuncUndefined.pData);
break;
}
_displayRef.display(); _displayRef.display();
_forceRefresh = false; return true;
}
} }
boolean ScreenManager::displayView(const uint8_t UID)
{
if(!_enabled) return true;
_forceRefresh = true;
ViewLink *viewLink = getLinkByUID(_viewLinkedList, UID); ViewLink *viewLink = getLinkByUID(_viewLinkedList, UID);
if(viewLink == NULL) if(viewLink == NULL)
{ {
//We display an error message on the screen //We display an error message on the screen
((ErrorInfo *)_viewNotFound.pData)->errorMessage = FPSTR("View does not exist");
((ErrorInfo *)_viewNotFound.pData)->viewUID = UID; ((ErrorInfo *)_viewNotFound.pData)->viewUID = UID;
(*_viewNotFound.viewLogicFunction)(_displayRef, _viewNotFound.pData);
_displayRef.display();
_error = VIEW_NOT_FOUND; _error = VIEW_NOT_FOUND;
_currentView = &_viewNotFound;
return false; return false;
} }else if(viewLink->viewLogicFunction == NULL)
else if(viewLink->viewLogicFunction == NULL)
{ {
//We display an error message on the screen //We display an error message on the screen
((ErrorInfo *)_viewFuncUndefined.pData)->errorMessage = FPSTR("View function is NULL");
((ErrorInfo *)_viewFuncUndefined.pData)->viewUID = UID; ((ErrorInfo *)_viewFuncUndefined.pData)->viewUID = UID;
(*_viewFuncUndefined.viewLogicFunction)(_displayRef, _viewFuncUndefined.pData);
_displayRef.display();
_error = VIEW_FUNC_UNDEFINED; _error = VIEW_FUNC_UNDEFINED;
_currentView = viewLink; _currentView = viewLink;
return false; return false;
} }
if(!(*viewLink->viewLogicFunction)(_displayRef, viewLink->pData))
{
//We display an error message on the screen
_displayRef.clearDisplay();
((ErrorInfo *)_viewFunctionFailedToExecute.pData)->errorMessage = FPSTR("View function failed\nto execute");
((ErrorInfo *)_viewFunctionFailedToExecute.pData)->viewUID = UID;
(*_viewFunctionFailedToExecute.viewLogicFunction)(_displayRef, _viewFunctionFailedToExecute.pData);
_displayRef.display();
_error = VIEW_FAILED_TO_EXECUTE;
_currentView = viewLink; _currentView = viewLink;
_error = OK; return false;
run();
return _error == OK;
} }
void ScreenManager::displayNextView() _displayRef.display();
{ _currentView = viewLink;
_forceRefresh = true;
_error = OK; _error = OK;
return true;
}
boolean ScreenManager::displayNextView()
{
if(_currentView == NO_CURRENT_VIEW && !isListEmpty(_viewLinkedList)) if(_currentView == NO_CURRENT_VIEW && !isListEmpty(_viewLinkedList))
{ {
_currentView = _viewLinkedList; _currentView = _viewLinkedList;
return displayView();
} }
else if(!isListEmpty(_currentView->next))
if(!isListEmpty(_currentView->next))
{ {
_currentView = _currentView->next; _currentView = _currentView->next;
return displayView();
} }
//End of the views, we cycle again :)
else if(isListEmpty(_currentView->next) && !isListEmpty(_viewLinkedList))
{
_currentView = _viewLinkedList; _currentView = _viewLinkedList;
} return displayView();
//We check if the view function is defined :
if(_currentView != NO_CURRENT_VIEW)
{
if(_currentView->viewLogicFunction == NULL)
{
((ErrorInfo *)_viewFuncUndefined.pData)->viewUID = _currentView->UID;
_error = VIEW_FUNC_UNDEFINED;
}
}
run();
}
void ScreenManager::displayPreviousView()
{
_forceRefresh = true;
_error = OK;
if(_currentView == NO_CURRENT_VIEW && !isListEmpty(_tail))
{
_currentView = _tail;
}
else if(!isListEmpty(_currentView->previous))
{
_currentView = _currentView->previous;
}
//End of the views, we cycle again :)
else if(isListEmpty(_currentView->previous) && !isListEmpty(_tail))
{
_currentView = _tail;
}
//We check if the view function is defined :
if(_currentView != NO_CURRENT_VIEW)
{
if(_currentView->viewLogicFunction == NULL)
{
((ErrorInfo *)_viewFuncUndefined.pData)->viewUID = _currentView->UID;
_error = VIEW_FUNC_UNDEFINED;
}
}
run();
} }
void ScreenManager::invertDisplayColor(const boolean inverted) void ScreenManager::invertDisplayColor(const boolean inverted)
@ -394,20 +354,6 @@ void ScreenManager::clearDisplay(const boolean bufferOnly)
} }
} }
void ScreenManager::clearViews()
{
ViewLinkedList cursor = _viewLinkedList;
while(!isListEmpty(cursor))
{
ViewLink *toDelete = cursor;
cursor = cursor->next;
free(cursor);
}
//Do not forget to mark the list as empty
_viewLinkedList = NULL;
_tail = NULL;
}
void ScreenManager::setEnabled(boolean value) void ScreenManager::setEnabled(boolean value)
{ {
_enabled = value; _enabled = value;

View File

@ -16,21 +16,18 @@ class ScreenManager
boolean addView(boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*), void *pData, const unsigned char UID); boolean addView(boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*), void *pData, const unsigned char UID);
boolean removeView(const unsigned char UID); boolean removeView(const unsigned char UID);
boolean displayView(const uint8_t UID); boolean displayView(const int UID = -1);
void displayNextView(); boolean displayNextView();
void displayPreviousView();
boolean applyCfgFromSD(); boolean applyCfgFromSD();
void invertDisplayColor(const boolean inverted); void invertDisplayColor(const boolean inverted);
void orientDisplay(const Orientation orientation); void orientDisplay(const Orientation orientation);
void dimDisplay(const boolean dimmed); void dimDisplay(const boolean dimmed);
void clearDisplay(const boolean bufferOnly = false); void clearDisplay(const boolean bufferOnly = false);
void clearViews();
void sleep(); void sleep();
void wakeUp(); void wakeUp();
void setEnabled(boolean value); void setEnabled(boolean value);
boolean getEnabled(); boolean getEnabled();
boolean init(); boolean init();
void run();
Error getError() const; Error getError() const;
const char* getErrorMessage() const; const char* getErrorMessage() const;
@ -61,11 +58,7 @@ class ScreenManager
boolean _displayColorInverted; boolean _displayColorInverted;
boolean _displayDimmed; boolean _displayDimmed;
boolean _enabled; boolean _enabled;
uint8_t _refreshRateHz; ViewLink* _currentView;
uint16_t _refreshInterval;
uint64_t _timeRef;
boolean _forceRefresh;
ViewLink *_currentView, *_tail;
ViewLink _viewNotFound, _viewFuncUndefined, _currentViewUndefined, _viewFunctionFailedToExecute; ViewLink _viewNotFound, _viewFuncUndefined, _currentViewUndefined, _viewFunctionFailedToExecute;
SDCardManager *_sdCardManager; SDCardManager *_sdCardManager;

View File

@ -38,13 +38,13 @@ class TCPServer
return _clientList.count(); return _clientList.count();
} }
virtual void run() virtual void runServer()
{ {
handleNewClients(); handleNewClients();
getClientData(); getClientData();
} }
virtual void start() virtual void startServer()
{ {
if(!_serverStarted) if(!_serverStarted)
{ {
@ -53,7 +53,7 @@ class TCPServer
} }
} }
virtual void stop() virtual void stopServer()
{ {
if(_serverStarted) if(_serverStarted)
{ {

View File

@ -164,7 +164,7 @@ boolean TaskSchedulerManager::clearTask()
_taskDataDictio.clear(); _taskDataDictio.clear();
} }
void TaskSchedulerManager::run() void TaskSchedulerManager::runTaskScheduler()
{ {
if(_taskDataDictio.count() == 0)return; if(_taskDataDictio.count() == 0)return;

View File

@ -69,7 +69,7 @@ class TaskSchedulerManager
boolean disableTask(const char *name); boolean disableTask(const char *name);
boolean disableTask(uint16_t id); boolean disableTask(uint16_t id);
boolean clearTask(); boolean clearTask();
void run(); void runTaskScheduler();
const unsigned int taskCount(); const unsigned int taskCount();
uint16_t findFreeTaskId(); uint16_t findFreeTaskId();
protected: protected:

View File

@ -9,16 +9,15 @@
SAB sab; SAB sab;
unsigned long currentMs = 0, buttonDownMs(0), buttonUpMs(0); unsigned long currentMs = 0, buttonMs = 0;
volatile boolean ioStateChange(false); volatile boolean ioStateChange(false);
boolean buttonPushSampled(false);
View1Packet v1p = {sab.getRtcManager().getDateTime(), sab.getSdCardManager().getSize(GBYTE), sab.getPowerManager().getPowerInfo(),0, sab.getSoftVersion(), &sab}; View1Packet v1p = {sab.getRtcManager().getDateTime(), sab.getSdCardManager().getSize(GBYTE), sab.getPowerManager().getPowerInfo(),0, sab.getSoftVersion(), &sab};
ViewAPPacket vap = {sab.getConnectivityManager().softAPmacAddress(), sab.getConnectivityManager().softAPSSID(), sab.getConnectivityManager().softAPIP(), sab.getConnectivityManager().softAPgetStationNum(), sab.getConnectivityManager().isAPEnabled()}; ViewAPPacket vap = {sab.getConnectivityManager().softAPmacAddress(), sab.getConnectivityManager().softAPSSID(), sab.getConnectivityManager().softAPIP(), sab.getConnectivityManager().softAPgetStationNum(), sab.getConnectivityManager().isAPEnabled()};
ViewSTAPacket vstap = {sab.getConnectivityManager().macAddress(), sab.getConnectivityManager().localIP(), sab.getConnectivityManager().RSSI(), sab.getConnectivityManager().isSTAEnabled()}; ViewSTAPacket vstap = {sab.getConnectivityManager().macAddress(), sab.getConnectivityManager().localIP(), sab.getConnectivityManager().RSSI(), sab.getConnectivityManager().isSTAEnabled()};
ViewIoInfoPacket vio = {{0},{0}}; ViewIoInfoPacket vio = {{0},{0}};
SdCardApiPacket sdCardApiPacket = {NULL, NULL}; SdCardApiPacket sdCardApiPacket = {NULL, NULL};
//DataLogger dataLogger = {HttpClient("192.168.0.17", "/esp8266/dataLogger.php", 1234), 0, false}; DataLogger dataLogger = {HttpClient("192.168.0.17", "/esp8266/dataLogger.php", 1234), 0, false};
void setup() void setup()
{ {
@ -71,7 +70,6 @@ void setup()
sab.getWebServer().addApiRoutine("/esp/restart", &(espRestartApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/esp/restart", &(espRestartApi), &sab, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/esp/reset", &(espResetApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/esp/reset", &(espResetApi), &sab, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/sab/wifi/stainfo", &(staWifiInfoApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/sab/wifi/stainfo", &(staWifiInfoApi), &sab, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/sab/wifi/scanner", &(apScannerApi), NULL, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/sab/systeminfo", &(systemInfoApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/sab/systeminfo", &(systemInfoApi), &sab, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/sab/power/info", &(powerInfoApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/sab/power/info", &(powerInfoApi), &sab, WEBServer<WEBClient>::GET);
sab.getWebServer().addApiRoutine("/sab/power/set/freq", &(powerSettingsApi), &sab, WEBServer<WEBClient>::GET); sab.getWebServer().addApiRoutine("/sab/power/set/freq", &(powerSettingsApi), &sab, WEBServer<WEBClient>::GET);
@ -84,8 +82,8 @@ void setup()
sab.getTaskSchedulerManager().addTask((uint16_t)0, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setMillis(5000), &(task_blink), &sab); sab.getTaskSchedulerManager().addTask((uint16_t)0, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setMillis(5000), &(task_blink), &sab);
sab.getTaskSchedulerManager().addTask(1, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(10), &(task_batt_sensing), &v1p); sab.getTaskSchedulerManager().addTask(1, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(10), &(task_batt_sensing), &v1p);
//dataLogger.client.keepAlive(true); dataLogger.client.keepAlive(true);
//sab.getTaskSchedulerManager().addTask(2, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(1)->setTriggerRightAway(false), &(task_post_data_logger), &dataLogger); sab.getTaskSchedulerManager().addTask(2, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(1)->setTriggerRightAway(false), &(task_post_data_logger), &dataLogger);
Serial.println("End setup"); Serial.println("End setup");
} }
@ -108,11 +106,13 @@ void loop()
sab.getIoManager().getPcf().digitalReadAll(vio.ioState); sab.getIoManager().getPcf().digitalReadAll(vio.ioState);
sab.getIoManager().getPcf().getPinModeAll(vio.ioMode); sab.getIoManager().getPcf().getPinModeAll(vio.ioMode);
sab.getScreenManager().displayView();
if(ioStateChange) Serial.println(F("ISR triggered")); if(ioStateChange) Serial.println(F("ISR triggered"));
ioStateChange = false; ioStateChange = false;
} }
/*if(digitalRead(GPIO_0) == 0 && millis() - buttonMs > 500) if(digitalRead(GPIO_0) == 0 && millis() - buttonMs > 500)
{ {
buttonMs = millis(); buttonMs = millis();
sab.getScreenManager().displayNextView(); sab.getScreenManager().displayNextView();
@ -120,40 +120,12 @@ void loop()
Serial.println("Changing view"); Serial.println("Changing view");
Serial.print("Selected view is : ");Serial.println(sab.getScreenManager().getCurrentViewUID()); Serial.print("Selected view is : ");Serial.println(sab.getScreenManager().getCurrentViewUID());
#endif #endif
}*/
if(digitalRead(GPIO_0) == 0 && !buttonPushSampled)
{
buttonPushSampled = true;
buttonDownMs = millis();
} }
if(digitalRead(GPIO_0) == 1 && buttonPushSampled) //Run the webServer
{ sab.getWebServer().runServer();
buttonPushSampled = false; sab.getFtpServer().runServer();
buttonUpMs = millis(); sab.getTaskSchedulerManager().runTaskScheduler();
if(buttonUpMs - buttonDownMs < 700 && buttonUpMs - buttonDownMs > 200)//Short press
{
sab.getScreenManager().displayNextView();
#ifdef DEBUG
Serial.printf("Changing view\nSelected view is : %d\n",sab.getScreenManager().getCurrentViewUID());
#endif
}
}
if(digitalRead(GPIO_0) == 0 && buttonPushSampled && millis() - buttonDownMs > 700)
{
buttonPushSampled = false;
sab.getScreenManager().displayPreviousView();
#ifdef DEBUG
Serial.printf("Changing view\nSelected view is : %d\n",sab.getScreenManager().getCurrentViewUID());
#endif
}
//Run the differentes services
sab.run();
} }
ICACHE_RAM_ATTR void ioISR() ICACHE_RAM_ATTR void ioISR()

View File

@ -48,7 +48,7 @@ typedef struct viewLink{
boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*); boolean (*viewLogicFunction)(Adafruit_SSD1306&, void*);
void *pData; void *pData;
const int UID; const int UID;
struct viewLink *next, *previous; struct viewLink *next;
} ViewLink, *ViewLinkedList; } ViewLink, *ViewLinkedList;
char *addChar(char *pointer, const char character); char *addChar(char *pointer, const char character);

View File

@ -30,8 +30,5 @@
#define SOFT_VERSION "1.5.5" //WEBServer now parsing form parameters in the post data section #define SOFT_VERSION "1.5.5" //WEBServer now parsing form parameters in the post data section
#define SOFT_VERSION "1.5.6" //Added new SAB method to set te cpu frequency at run time #define SOFT_VERSION "1.5.6" //Added new SAB method to set te cpu frequency at run time
#define SOFT_VERSION "1.6.0" //Added the new HttpClient class along with tests in a new task #define SOFT_VERSION "1.6.0" //Added the new HttpClient class along with tests in a new task
#define SOFT_VERSION "1.6.1" //Reworked the ScreenManager in order to display previous views and did some code optimization
#define SOFT_VERSION "1.6.2" //Added a run method to the screen manager and reworked the error system
#define SOFT_VERSION "1.6.3" //Added a new api call to get nearby wifi access points
#endif //VERSIONS_H #endif //VERSIONS_H

View File

@ -38,10 +38,7 @@ boolean nextViewApi(WEBServer<WEBClient>::HttpRequestData &HRD, WiFiClient *wc,
{ {
SAB *p = (SAB *)pData; SAB *p = (SAB *)pData;
char buffer[200]; char buffer[200];
if(p->getScreenManager().displayNextView())
p->getScreenManager().displayNextView();
if(p->getScreenManager().getError() == OK)
sprintf(buffer, "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"ok\", \"ViewUID\" : \"%d\" }", p->getScreenManager().getCurrentViewUID()); sprintf(buffer, "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"ok\", \"ViewUID\" : \"%d\" }", p->getScreenManager().getCurrentViewUID());
else else
sprintf(buffer, "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"failed\", \"message\" : \"%s\" }", p->getScreenManager().getErrorMessage()); sprintf(buffer, "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{ \"status\" : \"failed\", \"message\" : \"%s\" }", p->getScreenManager().getErrorMessage());
@ -218,20 +215,6 @@ boolean staWifiInfoApi(WEBServer<WEBClient>::HttpRequestData &HRD, WiFiClient *w
return true; return true;
}*/ }*/
boolean apScannerApi(WEBServer<WEBClient>::HttpRequestData &HRD, WiFiClient *wc, void *pData)
{
uint8_t number = WiFi.scanNetworks();
wc->print("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n[");
for(uint8_t i(0); i < number; i++)
{
wc->printf("%s{\"SSID\":\"%s\",\"RSSI\":%d,\"Protected\":\"%s\"}", i == 0 ? "":",", WiFi.SSID(i).c_str(), WiFi.RSSI(i), WiFi.encryptionType(i) == ENC_TYPE_NONE ? "No":"Yes");
}
wc->print("]");
return true;
}
boolean systemInfoApi(WEBServer<WEBClient>::HttpRequestData &HRD, WiFiClient *wc, void *pData) boolean systemInfoApi(WEBServer<WEBClient>::HttpRequestData &HRD, WiFiClient *wc, void *pData)
{ {
SAB *p = (SAB *)pData; SAB *p = (SAB *)pData;

View File

@ -19,7 +19,6 @@ typedef struct sdCardApiPacket
boolean sdCardUnmountApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*); boolean sdCardUnmountApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);
boolean sdCardMountApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*); boolean sdCardMountApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);
boolean apScannerApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);
boolean staWifiInfoApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*); boolean staWifiInfoApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);
boolean apWifiInfoApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*); boolean apWifiInfoApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);
boolean espRestartApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*); boolean espRestartApi(WEBServer<WEBClient>::HttpRequestData&, WiFiClient*, void*);