mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-11 02:43:43 +02:00
Fix compilation issues, change ProjectConfig into a shared_ptr with updated definitions
// todo implement the API and missing features
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
const char *CAMERA_MANAGER_TAG = "[CAMERA_MANAGER]";
|
||||
|
||||
CameraManager::CameraManager(ProjectConfig &projectConfig)
|
||||
CameraManager::CameraManager(std::shared_ptr<ProjectConfig> 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);
|
||||
|
||||
@@ -20,11 +20,11 @@ class CameraManager
|
||||
{
|
||||
private:
|
||||
sensor_t *camera_sensor;
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
camera_config_t config;
|
||||
|
||||
public:
|
||||
CameraManager(ProjectConfig &projectConfigl);
|
||||
CameraManager(std::shared_ptr<ProjectConfig> projectConfigl);
|
||||
int setCameraResolution(framesize_t frameSize);
|
||||
bool setupCamera(); // todo, once we have observers, make it private
|
||||
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
#include "CommandManager.hpp"
|
||||
|
||||
std::unordered_map<std::string, CommandType> 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<Command> CommandManager::createCommand(CommandType type)
|
||||
{
|
||||
switch (type)
|
||||
|
||||
@@ -27,20 +27,13 @@ enum CommandType
|
||||
RESTART_DEVICE,
|
||||
};
|
||||
|
||||
std::unordered_map<std::string, CommandType> 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> projectConfig;
|
||||
|
||||
public:
|
||||
CommandManager(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandManager(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
std::unique_ptr<Command> createCommand(CommandType type);
|
||||
|
||||
CommandResult executeFromJson(std::string *json);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
@@ -24,60 +24,60 @@ public:
|
||||
|
||||
class setWiFiCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
setWiFiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
setWiFiCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<WifiPayload> parsePayload(std::string &jsonPayload);
|
||||
};
|
||||
|
||||
class deleteWifiCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
deleteWifiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
deleteWifiCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<deleteNetworkPayload> parsePayload(std::string &jsonPayload);
|
||||
};
|
||||
|
||||
class updateWifiCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
updateWifiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
updateWifiCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<UpdateWifiPayload> parsePayload(std::string &jsonPayload);
|
||||
};
|
||||
|
||||
class updateAPWiFiCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
updateAPWiFiCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
updateAPWiFiCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<UpdateAPWiFiPayload> parsePayload(std::string &jsonPayload);
|
||||
};
|
||||
|
||||
class setMDNSCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
setMDNSCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
setMDNSCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<MDNSPayload> parsePayload(std::string &jsonPayload);
|
||||
};
|
||||
|
||||
class updateCameraCommand : public Command
|
||||
{
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
updateCameraCommand(ProjectConfig &projectConfig) : projectConfig(projectConfig) {};
|
||||
updateCameraCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
std::optional<UpdateCameraConfigPayload> 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> projectConfig;
|
||||
saveConfigCommand(std::shared_ptr<ProjectConfig> projectConfig) : projectConfig(projectConfig) {};
|
||||
CommandResult execute(std::string &jsonPayload) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -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(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)
|
||||
{
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
class MDNSManager
|
||||
{
|
||||
private:
|
||||
ProjectConfig &projectConfig;
|
||||
std::shared_ptr<ProjectConfig> projectConfig;
|
||||
|
||||
public:
|
||||
MDNSManager(ProjectConfig &projectConfig);
|
||||
MDNSManager(std::shared_ptr<ProjectConfig> projectConfig);
|
||||
esp_err_t start();
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "RestAPI.hpp"
|
||||
|
||||
RestAPI::RestAPI(std::string url)
|
||||
RestAPI::RestAPI(std::string url, std::shared_ptr<CommandManager> commandManager) : command_manager(commandManager)
|
||||
{
|
||||
this->url = url;
|
||||
// updates
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
#pragma once
|
||||
#ifndef RESTAPI_HPP
|
||||
#define RESTAPI_HPP
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <mongoose.h>
|
||||
#include <CommandManager.hpp>
|
||||
|
||||
#include "esp_log.h"
|
||||
|
||||
@@ -22,6 +26,7 @@ class RestAPI
|
||||
route_map routes;
|
||||
|
||||
struct mg_mgr mgr;
|
||||
std::shared_ptr<CommandManager> 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<CommandManager> 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);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -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<ProjectConfig> 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);
|
||||
|
||||
@@ -30,7 +30,7 @@ class WiFiManager
|
||||
{
|
||||
private:
|
||||
uint8_t channel;
|
||||
ProjectConfig &deviceConfig;
|
||||
std::shared_ptr<ProjectConfig> 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<ProjectConfig> deviceConfig);
|
||||
void Begin();
|
||||
};
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <CameraManager.hpp>
|
||||
#include <WebSocketLogger.hpp>
|
||||
#include <StreamServer.hpp>
|
||||
#include <CommandManager.hpp>
|
||||
#include <RestAPI.hpp>
|
||||
|
||||
#include <stdarg.h>
|
||||
@@ -31,12 +32,14 @@ static const char *TAG = "[MAIN]";
|
||||
|
||||
WebSocketLogger webSocketLogger;
|
||||
|
||||
ProjectConfig deviceConfig("openiris", CONFIG_MDNS_HOSTNAME);
|
||||
auto deviceConfig = std::make_shared<ProjectConfig>("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<CommandManager>(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();
|
||||
|
||||
Reference in New Issue
Block a user