refactor project

Refactor entire project - need to fix Statemanager to get rid of the linking error
This commit is contained in:
ZanzyTHEbar 2022-07-17 18:09:18 +01:00 committed by Zdzislaw Goik
parent 2af63b9d7c
commit abd1443bf5
25 changed files with 238 additions and 127 deletions

1
ESP/.gitignore vendored
View File

@ -1,2 +1,3 @@
.pio
.vscode
build

View File

@ -1,17 +0,0 @@
#pragma once
#include <Arduino.h>
class LEDManager
{
private:
uint8_t ledPin;
public:
explicit LEDManager(uint8_t pin) : ledPin(pin) {}
void setupLED() const;
void on() const;
void off() const;
void blink(unsigned int time);
void displayStatus();
};

View File

@ -1,7 +0,0 @@
#pragma once
#include <ESPmDNS.h>
#include "StateManager.h"
namespace MDNSHandler
{
void setupMDNS(const char *trackerName, StateManager * stateManager);
}

View File

@ -1,24 +0,0 @@
#pragma once
enum State
{
Starting = 1,
ConnectingToWifi = 2,
ConnectingToWifiError = 3,
ConnectingToWifiSuccess = 4,
ServerError = 5,
CameraError = 6,
MDNSSuccess = 7,
MDNSError = 8,
};
class StateManager
{
public:
StateManager() : current_state(Starting) {}
void setState(State state);
State getCurrentState();
private:
State current_state;
};

0
ESP/lib/library.json Normal file
View File

View File

@ -0,0 +1,23 @@
#include "StateManager.hpp"
template <class T>
StateManager<T>::StateManager() {}
template <class T>
StateManager<T>::~StateManager() {}
template <class T>
void StateManager<T>::setState(T state)
{
_current_state = state;
}
/*
* Get States
* Returns the current state of the device
*/
template <class T>
T StateManager<T>::getCurrentState()
{
return _current_state;
}

View File

@ -0,0 +1,99 @@
#ifndef STATEMANAGER_HPP
#define STATEMANAGER_HPP
#include <Arduino.h>
/*
* StateManager
* All Project States are managed here
*/
class ProgramStates
{
public:
struct DeviceStates
{
enum State_e
{
Starting,
Started,
Stopping,
Stopped,
Error
};
enum WiFiState_e
{
WiFiState_None,
WiFiState_Connecting,
WiFiState_Connected,
WiFiState_Disconnected,
WiFiState_Disconnecting,
WiFiState_Error
};
enum WebServerState_e
{
WebServerState_None,
WebServerState_Starting,
WebServerState_Started,
WebServerState_Stopping,
WebServerState_Stopped,
WebServerState_Error
};
enum MDNSState_e
{
MDNSState_None,
MDNSState_Starting,
MDNSState_Started,
MDNSState_Stopping,
MDNSState_Stopped,
MDNSState_Error
};
enum CameraState_e
{
Camera_Success,
Camera_Connected,
Camera_Disconnected,
Camera_Error
};
enum ButtonState_e
{
Buttons_OFF,
Buttons_ON,
Buttons_PLUS,
Buttons_MINUS,
Buttons_Error
};
enum StreamState_e
{
Stream_OFF,
Stream_ON,
Stream_Error
};
};
};
/*
* EventManager
* All Project Events are managed here
*/
template <class T>
class StateManager
{
public:
StateManager();
virtual ~StateManager();
void setState(T state);
T getCurrentState();
private:
static T _current_state;
};
#endif // STATEMANAGER_HPP

View File

@ -0,0 +1,41 @@
#include "LEDManager.hpp"
LEDManager::LEDManager(byte pin) : _ledPin(pin), _previousMillis(0), _ledState(false) {}
LEDManager::~LEDManager() {}
void LEDManager::begin()
{
pinMode(_ledPin, OUTPUT);
onOff(false);
/* for (auto &led : _leds)
{
if (led > 0)
{
pinMode(led, OUTPUT);
}
} */
}
void LEDManager::onOff(bool state) const
{
digitalWrite(_ledPin, state);
}
void LEDManager::blink(unsigned long time)
{
unsigned long currentMillis = millis();
if (currentMillis - _previousMillis >= time)
{
_previousMillis = currentMillis;
_ledState = !_ledState;
onOff(_ledState);
}
}
void LEDManager::displayStatus()
{
}

View File

@ -0,0 +1,22 @@
#ifndef LEDMANAGER_HPP
#define LEDMANAGER_HPP
#include <Arduino.h>
class LEDManager
{
public:
LEDManager(byte pin);
virtual ~LEDManager();
void begin();
void onOff(bool state) const;
void blink(unsigned long time);
void displayStatus();
private:
byte _ledPin;
unsigned long _previousMillis;
bool _ledState;
};
#endif // LEDMANAGER_HPP

View File

@ -1,4 +1,4 @@
#include "cameraHandler.h"
#include "cameraHandler.hpp"
int CameraHandler::setupCamera()
{

View File

@ -1,9 +1,9 @@
#pragma once
#include <WiFi.h>
#include "pinout.h"
#include "StateManager.h"
#include "../../data/StateManager/StateManager.hpp"
namespace WiFiHandler
{
void setupWifi(const char *ssid, const char *password, StateManager *stateManager);
void setupWifi(const char *ssid, const char *password, StateManager<ProgramStates::DeviceStates::WiFiState_e> *stateManager);
}

View File

@ -1,6 +1,6 @@
#include "WifiHandler.h"
#include "WifiHandler.hpp"
void WiFiHandler::setupWifi(const char *ssid, const char *password, StateManager *stateManager)
void WiFiHandler::setupWifi(const char *ssid, const char *password, StateManager<ProgramStates::DeviceStates::WiFiState_e> *stateManager)
{
log_d("Initializing connection to wifi");
@ -15,14 +15,14 @@ void WiFiHandler::setupWifi(const char *ssid, const char *password, StateManager
{
wifi_status = WiFi.status();
Serial.print(".");
stateManager->setState(State::ConnectingToWifi);
stateManager->setState(ProgramStates::DeviceStates::WiFiState_e::WiFiState_Connecting);
time_spent_connecting += 1600;
delay(1600);
}
if (wifi_status == WL_CONNECTED)
{
stateManager->setState(State::ConnectingToWifiSuccess);
stateManager->setState(ProgramStates::DeviceStates::WiFiState_e::WiFiState_Connected);
delay(1600);
log_i("\n\rWiFi connected\n\r");
log_i("ESP will be streaming under 'http://%s:80/\r\n", WiFi.localIP().toString().c_str());
@ -30,7 +30,7 @@ void WiFiHandler::setupWifi(const char *ssid, const char *password, StateManager
}
else
{
stateManager->setState(State::ConnectingToWifiError);
stateManager->setState(ProgramStates::DeviceStates::WiFiState_e::WiFiState_Error);
return;
}
}

View File

@ -1,18 +1,17 @@
#include "MDNSManager.h"
#include "MDNSManager.hpp"
void MDNSHandler::setupMDNS(const char *trackerName, StateManager *stateManager)
void MDNSHandler::setupMDNS(const char *trackerName, StateManager<ProgramStates::DeviceStates::MDNSState_e> *stateManager)
{
// TODO make it have a separate state manager
if (MDNS.begin(trackerName))
{
stateManager->setState(State::MDNSSuccess); // todo make it a separate state from the global one
stateManager->setState(ProgramStates::DeviceStates::MDNSState_e::MDNSState_Started);
MDNS.addService("openIrisTracker", "tcp", 80);
MDNS.addServiceTxt("openIrisTracker", "tcp", "stream_port", String(80));
log_d("MDNS initialized!");
}
else
{
stateManager->setState(State::MDNSError);
stateManager->setState(ProgramStates::DeviceStates::MDNSState_e::MDNSState_Error);
log_e("Error initializing MDNS");
}
}

View File

@ -0,0 +1,7 @@
#pragma once
#include <ESPmDNS.h>
#include "../../data/StateManager/StateManager.hpp"
namespace MDNSHandler
{
void setupMDNS(const char *trackerName, StateManager<ProgramStates::DeviceStates::MDNSState_e> *stateManager);
}

View File

@ -1,8 +1,8 @@
#include "streamServer.h"
#include "streamServer.hpp"
constexpr static char *STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
constexpr static char *STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
constexpr static char *STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\nX-Timestamp: %d.%06d\r\n\r\n";
constexpr static const char *STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
constexpr static const char *STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
constexpr static const char *STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\nX-Timestamp: %d.%06d\r\n\r\n";
esp_err_t StreamHelpers::stream(httpd_req_t *req)
{

View File

@ -1,4 +1,4 @@
#include "webserverHandler.h"
#include "webserverHandler.hpp"
APIServer::APIServer(int CONTROL_PORT, CameraHandler *cameraHandler)
{

View File

@ -1,6 +1,5 @@
#pragma once
#include "cameraHandler.h"
#include "../../io/camera/cameraHandler.hpp"
#define WEBSERVER_H
#define HTTP_ANY 0b01111111
#define HTTP_GET 0b00000001

View File

@ -22,9 +22,9 @@ build_flags =
-DDEBUG_ESP_PORT=Serial
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-DVERSION=${common.release_version}
; -I include
; -include "file_name.hpp" ; this has been added for future movement to a proper library structure
-I include
-include "pinout.h" ; this has been added for future movement to a proper library structure
; -include "credentials.h" ; this has been added for future movement to a proper library structure
build_unflags = -Os
board_build.partitions = min_spiffs.csv
lib_ldf_mode = deep+

View File

@ -1,27 +0,0 @@
#include "LEDManager.h"
void LEDManager::setupLED() const
{
pinMode(ledPin, OUTPUT);
}
void LEDManager::on() const
{
digitalWrite(ledPin, LOW);
}
void LEDManager::off() const
{
digitalWrite(ledPin, HIGH);
}
void LEDManager::blink(unsigned int time)
{
on();
delay(time);
off();
}
void LEDManager::displayStatus()
{
}

View File

@ -1,11 +0,0 @@
#include "StateManager.h"
void StateManager::setState(State state)
{
current_state = state;
}
State StateManager::getCurrentState()
{
return current_state;
}

View File

@ -1,39 +1,45 @@
#include <Arduino.h>
#include "pinout.h"
#include "credentials.h"
#include "WifiHandler.h"
#include "MDNSManager.h"
#include "cameraHandler.h"
#include "LEDManager.h"
#include "streamServer.h"
#include "webserverHandler.h"
#include <network/WifiHandler/WifiHandler.hpp>
#include <network/mDNS/MDNSManager.hpp>
#include <io/camera/cameraHandler.hpp>
#include <io/LEDManager/LEDManager.hpp>
#include <network/stream/streamServer.hpp>
#include <network/webserver/webserverHandler.hpp>
#include "OTA.h"
#include "StateManager.h"
#include <network/OTA/OTA.hpp>
const char *MDSNTrackerName = "OpenIrisTracker";
int STREAM_SERVER_PORT = 80;
int CONTROL_SERVER_PORT = 81;
auto ota = OTA();
auto stateManager = StateManager();
auto ledManager = LEDManager(33);
auto cameraHandler = CameraHandler();
auto apiServer = APIServer(CONTROL_SERVER_PORT, &cameraHandler);
auto streamServer = StreamServer(STREAM_SERVER_PORT);
StateManager<ProgramStates::DeviceStates::MDNSState_e> mdns_stateManager;
StateManager<ProgramStates::DeviceStates::WiFiState_e> wifi_stateManager;
StateManager<ProgramStates::DeviceStates::WebServerState_e> web_stateManager;
StateManager<ProgramStates::DeviceStates::CameraState_e> camera_stateManager;
StateManager<ProgramStates::DeviceStates::ButtonState_e> button_stateManager;
StateManager<ProgramStates::DeviceStates::StreamState_e> stream_stateManager;
OTA ota;
LEDManager ledManager(33);
CameraHandler cameraHandler;
APIServer apiServer(CONTROL_SERVER_PORT, &cameraHandler);
StreamServer streamServer(STREAM_SERVER_PORT);
void setup()
{
Serial.begin(115200);
Serial.setDebugOutput(true);
ledManager.setupLED();
ledManager.begin();
cameraHandler.setupCamera();
WiFiHandler::setupWifi(ssid, password, &stateManager);
MDNSHandler::setupMDNS(MDSNTrackerName, &stateManager);
WiFiHandler::setupWifi(ssid, password, &wifi_stateManager);
MDNSHandler::setupMDNS(MDSNTrackerName, &mdns_stateManager);
apiServer.startAPIServer();
streamServer.startStreamServer();
ledManager.on();
ledManager.onOff(true);
ota.SetupOTA(OTAPassword, OTAServerPort);
}