From 35596c129657879aa3fa9b5ac90f2e874f0e3836 Mon Sep 17 00:00:00 2001 From: anschrammh Date: Sun, 20 Oct 2019 18:13:29 +0200 Subject: [PATCH] Added two new methods to be able to reload wifi connectivity config while the card is running --- src/app/ConnectivityManager.cpp | 101 ++++++++++++++++++++++---------- src/app/ConnectivityManager.h | 2 + 2 files changed, 72 insertions(+), 31 deletions(-) diff --git a/src/app/ConnectivityManager.cpp b/src/app/ConnectivityManager.cpp index 29407ff..36be307 100644 --- a/src/app/ConnectivityManager.cpp +++ b/src/app/ConnectivityManager.cpp @@ -20,43 +20,82 @@ ConnectivityManager::ConnectivityManager(SDCardManager &sdCardManager) : _error( else { //SOFT AP PART - CFGFileParser cfgFileParser(sdCardManager, AP_CFG_FILE); - CFGDictionary *cfgDictionary = (CFGDictionary *) cfgFileParser.parseFile(); - if(cfgDictionary == NULL) - { - if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR; - } - else if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("CHANNEL") != NULL && (*cfgDictionary)("SSID_HIDDEN") != NULL && (*cfgDictionary)("AP_MAX_CONNECTION") != NULL && (*cfgDictionary)("ENABLED") != NULL) + startAP(); + + //STATION PART + connectToSTA(); + } +} + +boolean ConnectivityManager::connectToSTA() +{ + //STATION PART + CFGFileParser cfgFileParserSTA(*_sdCardManager, STA_CFG_FILE); + CFGDictionary *cfgDictionary = (CFGDictionary *) cfgFileParserSTA.parseFile(); + + boolean toBeReturned(true); + + if(cfgDictionary != NULL) + { + if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("ENABLED") != NULL) { if((*cfgDictionary)("ENABLED")->booleanValue()) { - if(!softAP((*cfgDictionary)("SSID")->stringValue(), strcmp((*cfgDictionary)("PASSWORD")->stringValue(),"") == 0 ? NULL:(*cfgDictionary)("PASSWORD")->stringValue(), (*cfgDictionary)("CHANNEL")->intValue(), (*cfgDictionary)("SSID_HIDDEN")->booleanValue(), (*cfgDictionary)("AP_MAX_CONNECTION")->intValue())) - _error &= AP_SETUP_ERR; - } - delete cfgDictionary; - } - else - { - if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR; - delete cfgDictionary; - } - - //STATION PART - CFGFileParser cfgFileParserSTA(sdCardManager, STA_CFG_FILE); - cfgDictionary = (CFGDictionary *) cfgFileParserSTA.parseFile(); - if(cfgDictionary != NULL) - { - if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("ENABLED") != NULL) - { - if((*cfgDictionary)("ENABLED")->booleanValue()) + if(!begin((*cfgDictionary)("SSID")->stringValue(), (*cfgDictionary)("PASSWORD")->stringValue())) { - if(!begin((*cfgDictionary)("SSID")->stringValue(), (*cfgDictionary)("PASSWORD")->stringValue())) - _error &= AP_SETUP_ERR; - } - } - delete cfgDictionary; + _error &= AP_SETUP_ERR; + toBeReturned = false; + } + } + else + enableSTA(false); } + else + toBeReturned = false; + + delete cfgDictionary; } + else + toBeReturned = false; + + return toBeReturned; +} + +boolean ConnectivityManager::startAP() +{ + CFGFileParser cfgFileParser(*_sdCardManager, AP_CFG_FILE); + CFGDictionary *cfgDictionary = (CFGDictionary *) cfgFileParser.parseFile(); + + boolean toBeReturned(true); + + if(cfgDictionary == NULL) + { + if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR; + + toBeReturned = false; + } + else if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("CHANNEL") != NULL && (*cfgDictionary)("SSID_HIDDEN") != NULL && (*cfgDictionary)("AP_MAX_CONNECTION") != NULL && (*cfgDictionary)("ENABLED") != NULL) + { + if((*cfgDictionary)("ENABLED")->booleanValue()) + { + if(!softAP((*cfgDictionary)("SSID")->stringValue(), strcmp((*cfgDictionary)("PASSWORD")->stringValue(),"") == 0 ? NULL:(*cfgDictionary)("PASSWORD")->stringValue(), (*cfgDictionary)("CHANNEL")->intValue(), (*cfgDictionary)("SSID_HIDDEN")->booleanValue(), (*cfgDictionary)("AP_MAX_CONNECTION")->intValue())) + { + _error &= AP_SETUP_ERR; + toBeReturned = false; + } + } + else + enableAP(false); + delete cfgDictionary; + } + else + { + if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR; + delete cfgDictionary; + toBeReturned = false; + } + + return toBeReturned; } boolean ConnectivityManager::enableSTAAndAP(boolean enabled) diff --git a/src/app/ConnectivityManager.h b/src/app/ConnectivityManager.h index 53bb6d6..70694a3 100644 --- a/src/app/ConnectivityManager.h +++ b/src/app/ConnectivityManager.h @@ -18,6 +18,8 @@ class ConnectivityManager : public ESP8266WiFiClass boolean enableSTAAndAP(boolean enable); boolean isSTAEnabled(); boolean isAPEnabled(); + boolean connectToSTA(); + boolean startAP(); unsigned char RSSIPercent(); unsigned char getError() const;