diff --git a/ESP/lib/src/network/WifiHandler/WifiHandler.hpp b/ESP/lib/src/network/WifiHandler/WifiHandler.hpp index 3a503c2..7cbfd0d 100644 --- a/ESP/lib/src/network/WifiHandler/WifiHandler.hpp +++ b/ESP/lib/src/network/WifiHandler/WifiHandler.hpp @@ -6,19 +6,27 @@ #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, StateManager *stateManager, + WiFiHandler(ProjectConfig *configManager, + APIServer *apiServer, + StreamServer *streamServer, + 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 f44f003..8680a25 100644 --- a/ESP/lib/src/network/WifiHandler/wifiHandler.cpp +++ b/ESP/lib/src/network/WifiHandler/wifiHandler.cpp @@ -2,10 +2,14 @@ #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), @@ -14,6 +18,49 @@ 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 9d05d6f..b10d80c 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, - WiFiHandler *network, + ProjectConfig *configManager, CameraHandler *camera, StateManager *stateManager, - const std::string &api_url) : API_Utilities(CONTROL_PORT, - network, + const std::string &api_url) : configManager(configManager), + API_Utilities(CONTROL_PORT, 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()); } - network->configManager->setWifiConfig(ssid, ssid, password, &channel, adhoc, true); + configManager->setWifiConfig(ssid, ssid, password, &channel, adhoc, true); - /* if (network->stateManager->getCurrentState() == WiFiState_e::WiFiState_ADHOC) + /* if (stateManager->getCurrentState() == WiFiState_e::WiFiState_ADHOC) { - network->configManager->setAPWifiConfig(ssid, password, &channel, adhoc, true); + 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.\"}"); - network->configManager->wifiConfigSave(); + configManager->wifiConfigSave(); break; } default: @@ -132,27 +132,27 @@ void BaseAPI::handleJson(AsyncWebServerRequest *request) { case DATA: { - network->configManager->getDeviceConfig()->data_json = true; + configManager->getDeviceConfig()->data_json = true; Network_Utilities::my_delay(1L); - std::string temp = network->configManager->getDeviceConfig()->data_json_string; + std::string temp = configManager->getDeviceConfig()->data_json_string; request->send(200, MIMETYPE_JSON, temp.c_str()); temp = std::string(); break; } case SETTINGS: { - network->configManager->getDeviceConfig()->config_json = true; + configManager->getDeviceConfig()->config_json = true; Network_Utilities::my_delay(1L); - std::string temp = network->configManager->getDeviceConfig()->config_json_string; + std::string temp = configManager->getDeviceConfig()->config_json_string; request->send(200, MIMETYPE_JSON, temp.c_str()); temp = std::string(); break; } case CONFIG: { - network->configManager->getDeviceConfig()->settings_json = true; + configManager->getDeviceConfig()->settings_json = true; Network_Utilities::my_delay(1L); - std::string temp = network->configManager->getDeviceConfig()->settings_json_string; + std::string temp = 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"); - network->configManager->reset(); + 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); - network->configManager->setCameraConfig(&temp_camera_vflip, &temp_camera_framesize, &temp_camera_hflip, &temp_camera_quality, true); - network->configManager->cameraConfigSave(); + configManager->setCameraConfig(&temp_camera_vflip, &temp_camera_framesize, &temp_camera_hflip, &temp_camera_quality, true); + 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 ac8a765..2ca8a68 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, - WiFiHandler *network, + ProjectConfig *configManager, 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 e17fde7..d61c41f 100644 --- a/ESP/lib/src/network/api/utilities/apiUtilities.cpp +++ b/ESP/lib/src/network/api/utilities/apiUtilities.cpp @@ -15,12 +15,10 @@ 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 d5dab5a..6f7f02b 100644 --- a/ESP/lib/src/network/api/utilities/apiUtilities.hpp +++ b/ESP/lib/src/network/api/utilities/apiUtilities.hpp @@ -30,7 +30,6 @@ class API_Utilities { public: API_Utilities(int CONTROL_PORT, - WiFiHandler *network, CameraHandler *camera, StateManager *stateManager, const std::string &api_url); @@ -69,7 +68,6 @@ 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 6f0e77b..ea01237 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, - WiFiHandler *network, + ProjectConfig *configManager, CameraHandler *camera, StateManager *stateManager, const std::string &api_url) : BaseAPI(CONTROL_PORT, - network, + configManager, camera, stateManager, api_url) {} diff --git a/ESP/lib/src/network/api/webserverHandler.hpp b/ESP/lib/src/network/api/webserverHandler.hpp index ddbdc43..3fbb257 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, - WiFiHandler *network, + ProjectConfig *configManager, CameraHandler *camera, StateManager *stateManager, const std::string &api_url); diff --git a/ESP/src/main.cpp b/ESP/src/main.cpp index 1e4b23e..5b98f80 100644 --- a/ESP/src/main.cpp +++ b/ESP/src/main.cpp @@ -12,18 +12,17 @@ #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); -WiFiHandler wifiHandler(&deviceConfig, &wifiStateManager, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL); -APIServer apiServer(CONTROL_SERVER_PORT, &wifiHandler, &cameraHandler, &wifiStateManager, "/control"); + +APIServer apiServer(81, &deviceConfig, &cameraHandler, &wifiStateManager, "/control"); +StreamServer streamServer(80); + +WiFiHandler wifiHandler(&deviceConfig, &apiServer, &streamServer, &wifiStateManager, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL); MDNSHandler mdnsHandler(&mdnsStateManager, &deviceConfig); -StreamServer streamServer(STREAM_SERVER_PORT); void setup() { @@ -37,48 +36,9 @@ void setup() deviceConfig.load(); cameraHandler.setupCamera(); - wifiHandler._enable_adhoc = ENABLE_ADHOC; - - wifiHandler.setupWifi(); + wifiHandler._enable_adhoc = ENABLE_ADHOC; // force ADHOC mode at compile time. + wifiHandler.begin(); // start wifi, apiserver, and streamserver 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(); }