diff --git a/components/CameraManager/CameraManager/CameraManager.cpp b/components/CameraManager/CameraManager/CameraManager.cpp index 53a7765..95c825d 100644 --- a/components/CameraManager/CameraManager/CameraManager.cpp +++ b/components/CameraManager/CameraManager/CameraManager.cpp @@ -2,7 +2,7 @@ const char *CAMERA_MANAGER_TAG = "[CAMERA_MANAGER]"; -CameraManager::CameraManager(ProjectConfig &projectConfig) +CameraManager::CameraManager(std::shared_ptr projectConfig) : projectConfig(projectConfig) {} void CameraManager::setupCameraPinout() @@ -225,7 +225,7 @@ bool CameraManager::setupCamera() void CameraManager::loadConfigData() { ESP_LOGD(CAMERA_MANAGER_TAG, "Loading camera config data"); - ProjectConfig::CameraConfig_t cameraConfig = projectConfig.getCameraConfig(); + ProjectConfig::CameraConfig_t cameraConfig = projectConfig->getCameraConfig(); this->setHFlip(cameraConfig.href); this->setVFlip(cameraConfig.vflip); this->setCameraResolution((framesize_t)cameraConfig.framesize); diff --git a/components/CameraManager/CameraManager/CameraManager.hpp b/components/CameraManager/CameraManager/CameraManager.hpp index bdff080..d8796a4 100644 --- a/components/CameraManager/CameraManager/CameraManager.hpp +++ b/components/CameraManager/CameraManager/CameraManager.hpp @@ -20,11 +20,11 @@ class CameraManager { private: sensor_t *camera_sensor; - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; camera_config_t config; public: - CameraManager(ProjectConfig &projectConfigl); + CameraManager(std::shared_ptr projectConfigl); int setCameraResolution(framesize_t frameSize); bool setupCamera(); // todo, once we have observers, make it private diff --git a/components/CommandManager/CommandManager/CommandManager.cpp b/components/CommandManager/CommandManager/CommandManager.cpp index d0da3cf..caa0c07 100644 --- a/components/CommandManager/CommandManager/CommandManager.cpp +++ b/components/CommandManager/CommandManager/CommandManager.cpp @@ -1,5 +1,13 @@ #include "CommandManager.hpp" +std::unordered_map commandTypeMap = { + {"ping", CommandType::PING}, + {"set_wifi", CommandType::SET_WIFI}, + {"update_wifi", CommandType::UPDATE_WIFI}, + {"delete_network", CommandType::DELETE_NETWORK}, + {"save_config", CommandType::SAVE_CONFIG}, +}; + std::unique_ptr CommandManager::createCommand(CommandType type) { switch (type) diff --git a/components/CommandManager/CommandManager/CommandManager.hpp b/components/CommandManager/CommandManager/CommandManager.hpp index fa7e64a..023b6e5 100644 --- a/components/CommandManager/CommandManager/CommandManager.hpp +++ b/components/CommandManager/CommandManager/CommandManager.hpp @@ -27,20 +27,13 @@ enum CommandType RESTART_DEVICE, }; -std::unordered_map commandTypeMap = { - {"ping", CommandType::PING}, - {"set_wifi", CommandType::SET_WIFI}, - {"update_wifi", CommandType::UPDATE_WIFI}, - {"delete_network", CommandType::DELETE_NETWORK}, - {"save_config", CommandType::SAVE_CONFIG}, -}; - class CommandManager { - ProjectConfig &projectConfig; +private: + std::shared_ptr projectConfig; public: - CommandManager(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + CommandManager(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; std::unique_ptr createCommand(CommandType type); CommandResult executeFromJson(std::string *json); diff --git a/components/CommandManager/CommandManager/Commands.cpp b/components/CommandManager/CommandManager/Commands.cpp index c9277fb..45c4989 100644 --- a/components/CommandManager/CommandManager/Commands.cpp +++ b/components/CommandManager/CommandManager/Commands.cpp @@ -60,7 +60,7 @@ CommandResult setWiFiCommand::execute(std::string &jsonPayload) return CommandResult::getErrorResult("Invalid payload"); } auto wifiConfig = payload.value(); - projectConfig.setWifiConfig( + projectConfig->setWifiConfig( wifiConfig.networkName, wifiConfig.ssid, wifiConfig.password, @@ -98,7 +98,7 @@ CommandResult deleteWifiCommand::execute(std::string &jsonPayload) if (!payload.has_value()) return CommandResult::getErrorResult("Invalid payload"); - projectConfig.deleteWifiConfig(payload.value().networkName, false); + projectConfig->deleteWifiConfig(payload.value().networkName, false); return CommandResult::getSuccessResult("Config updated"); } @@ -153,7 +153,7 @@ CommandResult updateWifiCommand::execute(std::string &jsonPayload) } auto updatedConfig = payload.value(); - auto storedNetworks = projectConfig.getWifiConfigs(); + auto storedNetworks = projectConfig->getWifiConfigs(); if (auto networkToUpdate = std::find_if( storedNetworks.begin(), storedNetworks.end(), @@ -161,7 +161,7 @@ CommandResult updateWifiCommand::execute(std::string &jsonPayload) { return network.name == updatedConfig.networkName; }); networkToUpdate != storedNetworks.end()) { - projectConfig.setWifiConfig( + projectConfig->setWifiConfig( updatedConfig.networkName, updatedConfig.ssid.has_value() ? updatedConfig.ssid.value() : networkToUpdate->ssid, updatedConfig.password.has_value() ? updatedConfig.password.value() : networkToUpdate->password, @@ -217,7 +217,7 @@ CommandResult setMDNSCommand::execute(std::string &jsonPayload) if (!payload.has_value()) return CommandResult::getErrorResult("Invalid payload"); - projectConfig.setMDNSConfig(payload.value().hostname, false); + projectConfig->setMDNSConfig(payload.value().hostname, true); return CommandResult::getSuccessResult("Config updated"); } @@ -260,8 +260,8 @@ CommandResult updateCameraCommand::execute(std::string &jsonPayload) } auto updatedConfig = payload.value(); - auto oldConfig = projectConfig.getCameraConfig(); - this->projectConfig.setCameraConfig( + auto oldConfig = projectConfig->getCameraConfig(); + this->projectConfig->setCameraConfig( updatedConfig.vflip.has_value() ? updatedConfig.vflip.value() : oldConfig.vflip, updatedConfig.framesize.has_value() ? updatedConfig.framesize.value() : oldConfig.framesize, updatedConfig.href.has_value() ? updatedConfig.href.value() : oldConfig.href, @@ -274,6 +274,6 @@ CommandResult updateCameraCommand::execute(std::string &jsonPayload) CommandResult saveConfigCommand::execute(std::string &jsonPayload) { - projectConfig.save(); + projectConfig->save(); return CommandResult::getSuccessResult("Config saved"); } \ No newline at end of file diff --git a/components/CommandManager/CommandManager/Commands.hpp b/components/CommandManager/CommandManager/Commands.hpp index 6cd82b4..030d40c 100644 --- a/components/CommandManager/CommandManager/Commands.hpp +++ b/components/CommandManager/CommandManager/Commands.hpp @@ -24,60 +24,60 @@ public: class setWiFiCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - setWiFiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + setWiFiCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; class deleteWifiCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - deleteWifiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + deleteWifiCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; class updateWifiCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - updateWifiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + updateWifiCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; class updateAPWiFiCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - updateAPWiFiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + updateAPWiFiCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; class setMDNSCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - setMDNSCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + setMDNSCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; class updateCameraCommand : public Command { - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - updateCameraCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + updateCameraCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; std::optional parsePayload(std::string &jsonPayload); }; @@ -85,8 +85,8 @@ public: class saveConfigCommand : public Command { public: - ProjectConfig &projectConfig; - saveConfigCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {}; + std::shared_ptr projectConfig; + saveConfigCommand(std::shared_ptr projectConfig) : projectConfig(projectConfig) {}; CommandResult execute(std::string &jsonPayload) override; }; diff --git a/components/MDNSManager/MDNSManager/MDNSManager.cpp b/components/MDNSManager/MDNSManager/MDNSManager.cpp index 7355916..2e525aa 100644 --- a/components/MDNSManager/MDNSManager/MDNSManager.cpp +++ b/components/MDNSManager/MDNSManager/MDNSManager.cpp @@ -2,7 +2,7 @@ static const char *MDNS_MANAGER_TAG = "[MDNS MANAGER]"; -MDNSManager::MDNSManager(ProjectConfig &projectConfig) : projectConfig(projectConfig) {} +MDNSManager::MDNSManager(std::shared_ptr projectConfig) : projectConfig(projectConfig) {} esp_err_t MDNSManager::start() { @@ -17,7 +17,7 @@ esp_err_t MDNSManager::start() return result; } - auto mdnsConfig = projectConfig.getMDNSConfig(); + auto mdnsConfig = projectConfig->getMDNSConfig(); result = mdns_hostname_set(mdnsConfig.hostname.c_str()); if (result != ESP_OK) { diff --git a/components/MDNSManager/MDNSManager/MDNSManager.hpp b/components/MDNSManager/MDNSManager/MDNSManager.hpp index 4cac355..e5bb511 100644 --- a/components/MDNSManager/MDNSManager/MDNSManager.hpp +++ b/components/MDNSManager/MDNSManager/MDNSManager.hpp @@ -11,10 +11,10 @@ class MDNSManager { private: - ProjectConfig &projectConfig; + std::shared_ptr projectConfig; public: - MDNSManager(ProjectConfig &projectConfig); + MDNSManager(std::shared_ptr projectConfig); esp_err_t start(); }; diff --git a/components/RestAPI/RestAPI/RestAPI.cpp b/components/RestAPI/RestAPI/RestAPI.cpp index 69f90a1..a66639c 100644 --- a/components/RestAPI/RestAPI/RestAPI.cpp +++ b/components/RestAPI/RestAPI/RestAPI.cpp @@ -1,6 +1,6 @@ #include "RestAPI.hpp" -RestAPI::RestAPI(std::string url) +RestAPI::RestAPI(std::string url, std::shared_ptr commandManager) : command_manager(commandManager) { this->url = url; // updates diff --git a/components/RestAPI/RestAPI/RestAPI.hpp b/components/RestAPI/RestAPI/RestAPI.hpp index 7dcc015..69fc93b 100644 --- a/components/RestAPI/RestAPI/RestAPI.hpp +++ b/components/RestAPI/RestAPI/RestAPI.hpp @@ -1,7 +1,11 @@ +#pragma once +#ifndef RESTAPI_HPP +#define RESTAPI_HPP #include #include #include #include +#include #include "esp_log.h" @@ -22,6 +26,7 @@ class RestAPI route_map routes; struct mg_mgr mgr; + std::shared_ptr command_manager; private: // updates @@ -50,7 +55,7 @@ private: public: // this will also need command manager - RestAPI(std::string url); + RestAPI(std::string url, std::shared_ptr command_manager); void begin(); void handle_request(struct mg_connection *connection, int event, void *event_data); void poll(); @@ -59,4 +64,6 @@ public: namespace RestAPIHelpers { void event_handler(struct mg_connection *connection, int event, void *event_data); -}; \ No newline at end of file +}; + +#endif \ No newline at end of file diff --git a/components/wifiManager/wifiManager/wifiManager.cpp b/components/wifiManager/wifiManager/wifiManager.cpp index cfd8a8f..97f1671 100644 --- a/components/wifiManager/wifiManager/wifiManager.cpp +++ b/components/wifiManager/wifiManager/wifiManager.cpp @@ -36,7 +36,7 @@ void WiFiManagerHelpers::event_handler(void *arg, esp_event_base_t event_base, } } -WiFiManager::WiFiManager(ProjectConfig &deviceConfig) : deviceConfig(deviceConfig) {} +WiFiManager::WiFiManager(std::shared_ptr deviceConfig) : deviceConfig(deviceConfig) {} void WiFiManager::SetCredentials(const char *ssid, const char *password) { @@ -84,7 +84,7 @@ void WiFiManager::ConnectWithHardcodedCredentials() void WiFiManager::ConnectWithStoredCredentials() { - auto networks = this->deviceConfig.getWifiConfigs(); + auto networks = this->deviceConfig->getWifiConfigs(); for (auto network : networks) { xEventGroupClearBits(s_wifi_event_group, WIFI_FAIL_BIT); diff --git a/components/wifiManager/wifiManager/wifiManager.hpp b/components/wifiManager/wifiManager/wifiManager.hpp index a1bbd58..bae060e 100644 --- a/components/wifiManager/wifiManager/wifiManager.hpp +++ b/components/wifiManager/wifiManager/wifiManager.hpp @@ -30,7 +30,7 @@ class WiFiManager { private: uint8_t channel; - ProjectConfig &deviceConfig; + std::shared_ptr deviceConfig; wifi_init_config_t _wifi_init_cfg = WIFI_INIT_CONFIG_DEFAULT(); wifi_config_t _wifi_cfg = {}; @@ -45,7 +45,7 @@ private: void SetupAccessPoint(); public: - WiFiManager(ProjectConfig &deviceConfig); + WiFiManager(std::shared_ptr deviceConfig); void Begin(); }; diff --git a/main/openiris_main.cpp b/main/openiris_main.cpp index 78b75e0..92d1421 100644 --- a/main/openiris_main.cpp +++ b/main/openiris_main.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -31,12 +32,14 @@ static const char *TAG = "[MAIN]"; WebSocketLogger webSocketLogger; -ProjectConfig deviceConfig("openiris", CONFIG_MDNS_HOSTNAME); +auto deviceConfig = std::make_shared("openiris", CONFIG_MDNS_HOSTNAME); WiFiManager wifiManager(deviceConfig); MDNSManager mdnsManager(deviceConfig); CameraManager cameraHandler(deviceConfig); StreamServer streamServer(80); -RestAPI restAPI("http://0.0.0.0:81"); + +auto commandManager = std::make_shared(deviceConfig); +RestAPI restAPI("http://0.0.0.0:81", commandManager); #ifdef CONFIG_WIRED_MODE UVCStreamManager uvcStream; @@ -96,7 +99,7 @@ extern "C" void app_main(void) esp_log_set_vprintf(&test_log); ledManager.setup(); - deviceConfig.load(); + deviceConfig->load(); wifiManager.Begin(); mdnsManager.start(); restAPI.begin();