diff --git a/ESP/lib/src/network/WifiHandler/WifiHandler.hpp b/ESP/lib/src/network/WifiHandler/WifiHandler.hpp index 7cbfd0d..3a503c2 100644 --- a/ESP/lib/src/network/WifiHandler/WifiHandler.hpp +++ b/ESP/lib/src/network/WifiHandler/WifiHandler.hpp @@ -6,27 +6,19 @@ #include #include "data/StateManager/StateManager.hpp" #include "data/config/project_config.hpp" -#include "network/api/webserverHandler.hpp" -#include "network/stream/streamServer.hpp" #include "data/utilities/helpers.hpp" class WiFiHandler { public: - WiFiHandler(ProjectConfig *configManager, - APIServer *apiServer, - StreamServer *streamServer, - StateManager *stateManager, + WiFiHandler(ProjectConfig *configManager, StateManager *stateManager, const std::string &ssid, const std::string &password, uint8_t channel); virtual ~WiFiHandler(); - void begin(); void setupWifi(); ProjectConfig *configManager; - APIServer *apiServer; - StreamServer *streamServer; StateManager *stateManager; bool _enable_adhoc; diff --git a/ESP/lib/src/network/WifiHandler/wifiHandler.cpp b/ESP/lib/src/network/WifiHandler/wifiHandler.cpp index 8680a25..f44f003 100644 --- a/ESP/lib/src/network/WifiHandler/wifiHandler.cpp +++ b/ESP/lib/src/network/WifiHandler/wifiHandler.cpp @@ -2,14 +2,10 @@ #include WiFiHandler::WiFiHandler(ProjectConfig *configManager, - APIServer *apiServer, - StreamServer *streamServer, StateManager *stateManager, const std::string &ssid, const std::string &password, uint8_t channel) : configManager(configManager), - apiServer(apiServer), - streamServer(streamServer), stateManager(stateManager), ssid(ssid), password(password), @@ -18,49 +14,6 @@ WiFiHandler::WiFiHandler(ProjectConfig *configManager, WiFiHandler::~WiFiHandler() {} -void WiFiHandler::begin() -{ - this->setupWifi(); - - switch (this->stateManager->getCurrentState()) - { - case WiFiState_e::WiFiState_Disconnected: - { - //! TODO: Implement - break; - } - case WiFiState_e::WiFiState_Disconnecting: - { - //! TODO: Implement - break; - } - case WiFiState_e::WiFiState_ADHOC: - { - streamServer->startStreamServer(); - apiServer->begin(); - log_d("[SETUP]: Starting Stream Server"); - break; - } - case WiFiState_e::WiFiState_Connected: - { - streamServer->startStreamServer(); - apiServer->begin(); - log_d("[SETUP]: Starting Stream Server"); - break; - } - case WiFiState_e::WiFiState_Connecting: - { - //! TODO: Implement - break; - } - case WiFiState_e::WiFiState_Error: - { - //! TODO: Implement - break; - } - } -} - void WiFiHandler::setupWifi() { if (this->_enable_adhoc || stateManager->getCurrentState() == WiFiState_e::WiFiState_ADHOC) diff --git a/ESP/lib/src/network/api/baseAPI/baseAPI.cpp b/ESP/lib/src/network/api/baseAPI/baseAPI.cpp index b10d80c..9d05d6f 100644 --- a/ESP/lib/src/network/api/baseAPI/baseAPI.cpp +++ b/ESP/lib/src/network/api/baseAPI/baseAPI.cpp @@ -1,11 +1,11 @@ #include "baseAPI.hpp" BaseAPI::BaseAPI(int CONTROL_PORT, - ProjectConfig *configManager, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, - const std::string &api_url) : configManager(configManager), - API_Utilities(CONTROL_PORT, + const std::string &api_url) : API_Utilities(CONTROL_PORT, + network, camera, stateManager, api_url) {} @@ -74,11 +74,11 @@ void BaseAPI::setWiFi(AsyncWebServerRequest *request) log_i("%s[%s]: %s\n", _networkMethodsMap[request->method()].c_str(), param->name().c_str(), param->value().c_str()); } - configManager->setWifiConfig(ssid, ssid, password, &channel, adhoc, true); + network->configManager->setWifiConfig(ssid, ssid, password, &channel, adhoc, true); - /* if (stateManager->getCurrentState() == WiFiState_e::WiFiState_ADHOC) + /* if (network->stateManager->getCurrentState() == WiFiState_e::WiFiState_ADHOC) { - configManager->setAPWifiConfig(ssid, password, &channel, adhoc, true); + network->configManager->setAPWifiConfig(ssid, password, &channel, adhoc, true); } else { @@ -86,7 +86,7 @@ void BaseAPI::setWiFi(AsyncWebServerRequest *request) } */ request->send(200, MIMETYPE_JSON, "{\"msg\":\"Done. Wifi Creds have been set.\"}"); - configManager->wifiConfigSave(); + network->configManager->wifiConfigSave(); break; } default: @@ -132,27 +132,27 @@ void BaseAPI::handleJson(AsyncWebServerRequest *request) { case DATA: { - configManager->getDeviceConfig()->data_json = true; + network->configManager->getDeviceConfig()->data_json = true; Network_Utilities::my_delay(1L); - std::string temp = configManager->getDeviceConfig()->data_json_string; + std::string temp = network->configManager->getDeviceConfig()->data_json_string; request->send(200, MIMETYPE_JSON, temp.c_str()); temp = std::string(); break; } case SETTINGS: { - configManager->getDeviceConfig()->config_json = true; + network->configManager->getDeviceConfig()->config_json = true; Network_Utilities::my_delay(1L); - std::string temp = configManager->getDeviceConfig()->config_json_string; + std::string temp = network->configManager->getDeviceConfig()->config_json_string; request->send(200, MIMETYPE_JSON, temp.c_str()); temp = std::string(); break; } case CONFIG: { - configManager->getDeviceConfig()->settings_json = true; + network->configManager->getDeviceConfig()->settings_json = true; Network_Utilities::my_delay(1L); - std::string temp = configManager->getDeviceConfig()->settings_json_string; + std::string temp = network->configManager->getDeviceConfig()->settings_json_string; request->send(200, MIMETYPE_JSON, temp.c_str()); temp = std::string(); break; @@ -196,7 +196,7 @@ void BaseAPI::factoryReset(AsyncWebServerRequest *request) case GET: { log_d("Factory Reset"); - configManager->reset(); + network->configManager->reset(); request->send(200, MIMETYPE_JSON, "{\"msg\":\"Factory Reset\"}"); } default: @@ -294,8 +294,8 @@ void BaseAPI::setCamera(AsyncWebServerRequest *request) camera->setHFlip(temp_camera_hflip); //! TODO: Need to add -> camera->setQuality(temp_camera_quality); - configManager->setCameraConfig(&temp_camera_vflip, &temp_camera_framesize, &temp_camera_hflip, &temp_camera_quality, true); - configManager->cameraConfigSave(); + network->configManager->setCameraConfig(&temp_camera_vflip, &temp_camera_framesize, &temp_camera_hflip, &temp_camera_quality, true); + network->configManager->cameraConfigSave(); request->send(200, MIMETYPE_JSON, "{\"msg\":\"Done. Camera Settings have been set.\"}"); break; diff --git a/ESP/lib/src/network/api/baseAPI/baseAPI.hpp b/ESP/lib/src/network/api/baseAPI/baseAPI.hpp index 2ca8a68..ac8a765 100644 --- a/ESP/lib/src/network/api/baseAPI/baseAPI.hpp +++ b/ESP/lib/src/network/api/baseAPI/baseAPI.hpp @@ -7,7 +7,7 @@ class BaseAPI : public API_Utilities { protected: - ProjectConfig *configManager; + enum JSON_TYPES { CONFIG, @@ -53,7 +53,7 @@ protected: public: BaseAPI(int CONTROL_PORT, - ProjectConfig *configManager, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url); diff --git a/ESP/lib/src/network/api/utilities/apiUtilities.cpp b/ESP/lib/src/network/api/utilities/apiUtilities.cpp index d61c41f..e17fde7 100644 --- a/ESP/lib/src/network/api/utilities/apiUtilities.cpp +++ b/ESP/lib/src/network/api/utilities/apiUtilities.cpp @@ -15,10 +15,12 @@ const char *API_Utilities::MIMETYPE_JSON{"application/json"}; //********************************************************************************************* API_Utilities::API_Utilities(int CONTROL_PORT, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url) : server(new AsyncWebServer(CONTROL_PORT)), stateManager(stateManager), + network(network), camera(camera), api_url(api_url) {} diff --git a/ESP/lib/src/network/api/utilities/apiUtilities.hpp b/ESP/lib/src/network/api/utilities/apiUtilities.hpp index 6f7f02b..d5dab5a 100644 --- a/ESP/lib/src/network/api/utilities/apiUtilities.hpp +++ b/ESP/lib/src/network/api/utilities/apiUtilities.hpp @@ -30,6 +30,7 @@ class API_Utilities { public: API_Utilities(int CONTROL_PORT, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url); @@ -68,6 +69,7 @@ protected: protected: AsyncWebServer *server; + WiFiHandler *network; CameraHandler *camera; StateManager *stateManager; typedef std::unordered_map networkMethodsMap_t; diff --git a/ESP/lib/src/network/api/webserverHandler.cpp b/ESP/lib/src/network/api/webserverHandler.cpp index ea01237..6f0e77b 100644 --- a/ESP/lib/src/network/api/webserverHandler.cpp +++ b/ESP/lib/src/network/api/webserverHandler.cpp @@ -5,11 +5,11 @@ //********************************************************************************************* APIServer::APIServer(int CONTROL_PORT, - ProjectConfig *configManager, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url) : BaseAPI(CONTROL_PORT, - configManager, + network, camera, stateManager, api_url) {} diff --git a/ESP/lib/src/network/api/webserverHandler.hpp b/ESP/lib/src/network/api/webserverHandler.hpp index 3fbb257..ddbdc43 100644 --- a/ESP/lib/src/network/api/webserverHandler.hpp +++ b/ESP/lib/src/network/api/webserverHandler.hpp @@ -8,7 +8,7 @@ class APIServer : public BaseAPI { public: APIServer(int CONTROL_PORT, - ProjectConfig *configManager, + WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url); diff --git a/ESP/src/main.cpp b/ESP/src/main.cpp index 5b98f80..1e4b23e 100644 --- a/ESP/src/main.cpp +++ b/ESP/src/main.cpp @@ -12,17 +12,18 @@ #include +int STREAM_SERVER_PORT = 80; +int CONTROL_SERVER_PORT = 81; + ProjectConfig deviceConfig; OTA ota(&deviceConfig); LEDManager ledManager(33); CameraHandler cameraHandler(&deviceConfig); // SerialManager serialManager(&deviceConfig); - -APIServer apiServer(81, &deviceConfig, &cameraHandler, &wifiStateManager, "/control"); -StreamServer streamServer(80); - -WiFiHandler wifiHandler(&deviceConfig, &apiServer, &streamServer, &wifiStateManager, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL); +WiFiHandler wifiHandler(&deviceConfig, &wifiStateManager, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL); +APIServer apiServer(CONTROL_SERVER_PORT, &wifiHandler, &cameraHandler, &wifiStateManager, "/control"); MDNSHandler mdnsHandler(&mdnsStateManager, &deviceConfig); +StreamServer streamServer(STREAM_SERVER_PORT); void setup() { @@ -36,9 +37,48 @@ void setup() deviceConfig.load(); cameraHandler.setupCamera(); - wifiHandler._enable_adhoc = ENABLE_ADHOC; // force ADHOC mode at compile time. - wifiHandler.begin(); // start wifi, apiserver, and streamserver + wifiHandler._enable_adhoc = ENABLE_ADHOC; + + wifiHandler.setupWifi(); mdnsHandler.startMDNS(); + + switch (wifiStateManager.getCurrentState()) + { + case WiFiState_e::WiFiState_Disconnected: + { + //! TODO: Implement + break; + } + case WiFiState_e::WiFiState_Disconnecting: + { + //! TODO: Implement + break; + } + case WiFiState_e::WiFiState_ADHOC: + { + streamServer.startStreamServer(); + apiServer.begin(); + log_d("[SETUP]: Starting Stream Server"); + break; + } + case WiFiState_e::WiFiState_Connected: + { + streamServer.startStreamServer(); + apiServer.begin(); + log_d("[SETUP]: Starting Stream Server"); + break; + } + case WiFiState_e::WiFiState_Connecting: + { + //! TODO: Implement + break; + } + case WiFiState_e::WiFiState_Error: + { + //! TODO: Implement + break; + } + } ota.SetupOTA(); }