Large Update

- Clean up main
- Change handling of APIServer start & StreamServer start
to the WiFiHandler
- Call the setupWifi in the WiFiHandler begin method
- Remove WiFiHandler from APIServer and pass in ProjectConfig directly
This commit is contained in:
ZanzyTHEbar 2022-09-05 13:11:59 +01:00
parent f23c477315
commit 4812ba5f35
9 changed files with 84 additions and 73 deletions

View File

@ -6,19 +6,27 @@
#include <WiFi.h>
#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<WiFiState_e> *stateManager,
WiFiHandler(ProjectConfig *configManager,
APIServer *apiServer,
StreamServer *streamServer,
StateManager<WiFiState_e> *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<WiFiState_e> *stateManager;
bool _enable_adhoc;

View File

@ -2,10 +2,14 @@
#include <vector>
WiFiHandler::WiFiHandler(ProjectConfig *configManager,
APIServer *apiServer,
StreamServer *streamServer,
StateManager<WiFiState_e> *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)

View File

@ -1,11 +1,11 @@
#include "baseAPI.hpp"
BaseAPI::BaseAPI(int CONTROL_PORT,
WiFiHandler *network,
ProjectConfig *configManager,
CameraHandler *camera,
StateManager<WiFiState_e> *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;

View File

@ -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<WiFiState_e> *stateManager,
const std::string &api_url);

View File

@ -15,12 +15,10 @@ const char *API_Utilities::MIMETYPE_JSON{"application/json"};
//*********************************************************************************************
API_Utilities::API_Utilities(int CONTROL_PORT,
WiFiHandler *network,
CameraHandler *camera,
StateManager<WiFiState_e> *stateManager,
const std::string &api_url) : server(new AsyncWebServer(CONTROL_PORT)),
stateManager(stateManager),
network(network),
camera(camera),
api_url(api_url) {}

View File

@ -30,7 +30,6 @@ class API_Utilities
{
public:
API_Utilities(int CONTROL_PORT,
WiFiHandler *network,
CameraHandler *camera,
StateManager<WiFiState_e> *stateManager,
const std::string &api_url);
@ -69,7 +68,6 @@ protected:
protected:
AsyncWebServer *server;
WiFiHandler *network;
CameraHandler *camera;
StateManager<WiFiState_e> *stateManager;
typedef std::unordered_map<std::string, WebRequestMethodComposite> networkMethodsMap_t;

View File

@ -5,11 +5,11 @@
//*********************************************************************************************
APIServer::APIServer(int CONTROL_PORT,
WiFiHandler *network,
ProjectConfig *configManager,
CameraHandler *camera,
StateManager<WiFiState_e> *stateManager,
const std::string &api_url) : BaseAPI(CONTROL_PORT,
network,
configManager,
camera,
stateManager,
api_url) {}

View File

@ -8,7 +8,7 @@ class APIServer : public BaseAPI
{
public:
APIServer(int CONTROL_PORT,
WiFiHandler *network,
ProjectConfig *configManager,
CameraHandler *camera,
StateManager<WiFiState_e> *stateManager,
const std::string &api_url);

View File

@ -12,18 +12,17 @@
#include <network/OTA/OTA.hpp>
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();
}