mirror of
https://github.com/EyeTrackVR/OpenIris.git
synced 2025-11-04 15:39:42 +08:00
refactor project
Refactor entire project - need to fix Statemanager to get rid of the linking error
This commit is contained in:
parent
2af63b9d7c
commit
abd1443bf5
1
ESP/.gitignore
vendored
1
ESP/.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
.pio
|
||||
.vscode
|
||||
build
|
||||
|
||||
@ -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();
|
||||
};
|
||||
@ -1,7 +0,0 @@
|
||||
#pragma once
|
||||
#include <ESPmDNS.h>
|
||||
#include "StateManager.h"
|
||||
namespace MDNSHandler
|
||||
{
|
||||
void setupMDNS(const char *trackerName, StateManager * stateManager);
|
||||
}
|
||||
@ -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
0
ESP/lib/library.json
Normal file
23
ESP/lib/src/data/StateManager/StateManager.cpp
Normal file
23
ESP/lib/src/data/StateManager/StateManager.cpp
Normal 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;
|
||||
}
|
||||
99
ESP/lib/src/data/StateManager/StateManager.hpp
Normal file
99
ESP/lib/src/data/StateManager/StateManager.hpp
Normal 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
|
||||
41
ESP/lib/src/io/LEDManager/LEDManager.cpp
Normal file
41
ESP/lib/src/io/LEDManager/LEDManager.cpp
Normal 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()
|
||||
{
|
||||
}
|
||||
22
ESP/lib/src/io/LEDManager/LEDManager.hpp
Normal file
22
ESP/lib/src/io/LEDManager/LEDManager.hpp
Normal 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
|
||||
@ -1,4 +1,4 @@
|
||||
#include "cameraHandler.h"
|
||||
#include "cameraHandler.hpp"
|
||||
|
||||
int CameraHandler::setupCamera()
|
||||
{
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
7
ESP/lib/src/network/mDNS/MDNSManager.hpp
Normal file
7
ESP/lib/src/network/mDNS/MDNSManager.hpp
Normal 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);
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
@ -1,4 +1,4 @@
|
||||
#include "webserverHandler.h"
|
||||
#include "webserverHandler.hpp"
|
||||
|
||||
APIServer::APIServer(int CONTROL_PORT, CameraHandler *cameraHandler)
|
||||
{
|
||||
@ -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
|
||||
@ -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+
|
||||
|
||||
@ -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()
|
||||
{
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
#include "StateManager.h"
|
||||
|
||||
void StateManager::setState(State state)
|
||||
{
|
||||
current_state = state;
|
||||
}
|
||||
|
||||
State StateManager::getCurrentState()
|
||||
{
|
||||
return current_state;
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user