mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-18 14:03:45 +02:00
Rewrite state manager, clean up states, fixup typos - todo test state display
This commit is contained in:
@@ -1,8 +1,98 @@
|
||||
#include "StateManager.hpp"
|
||||
|
||||
StateManager<WiFiState_e> wifiStateManager;
|
||||
StateManager<MDNSState_e> mdnsStateManager;
|
||||
StateManager<CameraState_e> cameraStateManager;
|
||||
StateManager<LEDStates_e> ledStateManager;
|
||||
StateManager<StreamState_e> streamStateManager;
|
||||
StateManager<ConfigState_e> configStateManager;
|
||||
StateManager::StateManager(QueueHandle_t eventQueue, QueueHandle_t ledStateQueue) : eventQueue(eventQueue), ledStateQueue(ledStateQueue) {}
|
||||
|
||||
void StateManager::HandleUpdateState()
|
||||
{
|
||||
SystemEvent eventBuffer;
|
||||
auto ledStreamState = LEDStates_e::_LedStateNone;
|
||||
|
||||
if (xQueueReceive(this->eventQueue, &eventBuffer, portMAX_DELAY))
|
||||
{
|
||||
switch (eventBuffer.source)
|
||||
{
|
||||
|
||||
case EventSource::WIFI:
|
||||
{
|
||||
this->wifi_state = std::get<WiFiState_e>(eventBuffer.value);
|
||||
|
||||
if (this->wifi_state == WiFiState_e::WiFiState_Connecting)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_WiFiState_Connecting;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
if (this->wifi_state == WiFiState_e::WiFiState_Connected)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_WiFiState_Connected;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
if (this->wifi_state == WiFiState_e::WiFiState_Error)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_WiFiState_Error;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case EventSource::MDNS:
|
||||
{
|
||||
this->mdns_state = std::get<MDNSState_e>(eventBuffer.value);
|
||||
break;
|
||||
}
|
||||
|
||||
case EventSource::CAMERA:
|
||||
{
|
||||
this->camera_state = std::get<CameraState_e>(eventBuffer.value);
|
||||
|
||||
if (this->camera_state == CameraState_e::Camera_Error)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_Camera_Error;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case EventSource::STREAM:
|
||||
{
|
||||
this->stream_state = std::get<StreamState_e>(eventBuffer.value);
|
||||
|
||||
if (this->stream_state == StreamState_e::Stream_ON)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_LedStateStreaming;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
if (this->stream_state == StreamState_e::Stream_ON)
|
||||
{
|
||||
ledStreamState = LEDStates_e::_LedStateStreaming;
|
||||
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WiFiState_e StateManager::GetWifiState()
|
||||
{
|
||||
return this->wifi_state;
|
||||
}
|
||||
|
||||
CameraState_e StateManager::GetCameraState()
|
||||
{
|
||||
return this->camera_state;
|
||||
}
|
||||
|
||||
void HandleStateManagerTask(void *pvParameters)
|
||||
{
|
||||
StateManager *stateManager = static_cast<StateManager *>(pvParameters);
|
||||
|
||||
while (1)
|
||||
{
|
||||
stateManager->HandleUpdateState();
|
||||
}
|
||||
}
|
||||
@@ -1,112 +1,90 @@
|
||||
#pragma once
|
||||
#ifndef STATEMANAGER_HPP
|
||||
#define STATEMANAGER_HPP
|
||||
/*
|
||||
* StateManager
|
||||
* All Project States are managed here
|
||||
*/
|
||||
struct DeviceStates
|
||||
#include <variant>
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/queue.h"
|
||||
|
||||
enum LEDStates_e
|
||||
{
|
||||
enum LEDStates_e
|
||||
{
|
||||
_LedStateNone,
|
||||
_LedStateStreaming,
|
||||
_LedStateStoppedStreaming,
|
||||
_WiFiState_Error,
|
||||
_Camera_Error,
|
||||
_WiFiState_Connecting,
|
||||
_WiFiState_Connected
|
||||
};
|
||||
|
||||
enum ConfigState_e
|
||||
{
|
||||
configLoaded,
|
||||
deviceConfigUpdated,
|
||||
mdnsConfigUpdated,
|
||||
networksConfigUpdated,
|
||||
apConfigUpdated,
|
||||
wifiTxPowerUpdated,
|
||||
cameraConfigUpdated
|
||||
};
|
||||
|
||||
enum WiFiState_e
|
||||
{
|
||||
WiFiState_NotInitialized,
|
||||
WiFiState_Initialized,
|
||||
WiFiState_ReadyToConect,
|
||||
WiFiState_Connecting,
|
||||
WiFiState_WaitingForIp,
|
||||
WiFiState_Connected,
|
||||
WiFiState_Disconnected,
|
||||
WiFiState_ADHOC,
|
||||
WiFiState_Error
|
||||
};
|
||||
|
||||
enum MDNSState_e
|
||||
{
|
||||
MDNSState_Stopped,
|
||||
MDNSState_Starting,
|
||||
MDNSState_Started,
|
||||
MDNSState_Stopping,
|
||||
MDNSState_Error,
|
||||
MDNSState_QueryStarted,
|
||||
MDNSState_QueryComplete
|
||||
};
|
||||
|
||||
enum CameraState_e
|
||||
{
|
||||
Camera_Disconnected,
|
||||
Camera_Success,
|
||||
Camera_Error
|
||||
};
|
||||
|
||||
enum StreamState_e
|
||||
{
|
||||
Stream_OFF,
|
||||
Stream_ON,
|
||||
Stream_Error
|
||||
};
|
||||
_LedStateNone,
|
||||
_LedStateStreaming,
|
||||
_LedStateStoppedStreaming,
|
||||
_Camera_Error,
|
||||
_WiFiState_Error,
|
||||
_WiFiState_Connecting,
|
||||
_WiFiState_Connected
|
||||
};
|
||||
|
||||
enum WiFiState_e
|
||||
{
|
||||
WiFiState_NotInitialized,
|
||||
WiFiState_Initialized,
|
||||
WiFiState_ReadyToConect,
|
||||
WiFiState_Connecting,
|
||||
WiFiState_WaitingForIp,
|
||||
WiFiState_Connected,
|
||||
WiFiState_Disconnected,
|
||||
WiFiState_Error
|
||||
};
|
||||
|
||||
enum MDNSState_e
|
||||
{
|
||||
MDNSState_Stopped,
|
||||
MDNSState_Starting,
|
||||
MDNSState_Started,
|
||||
MDNSState_Stopping,
|
||||
MDNSState_Error,
|
||||
MDNSState_QueryStarted,
|
||||
MDNSState_QueryComplete
|
||||
};
|
||||
|
||||
enum CameraState_e
|
||||
{
|
||||
Camera_Disconnected,
|
||||
Camera_Success,
|
||||
Camera_Error
|
||||
};
|
||||
|
||||
enum StreamState_e
|
||||
{
|
||||
Stream_OFF,
|
||||
Stream_ON,
|
||||
};
|
||||
|
||||
enum class EventSource
|
||||
{
|
||||
WIFI,
|
||||
MDNS,
|
||||
CAMERA,
|
||||
STREAM
|
||||
};
|
||||
|
||||
struct SystemEvent
|
||||
{
|
||||
EventSource source;
|
||||
std::variant<WiFiState_e, MDNSState_e, CameraState_e, StreamState_e> value;
|
||||
};
|
||||
|
||||
/*
|
||||
* EventManager
|
||||
* All Project Events are managed here
|
||||
*/
|
||||
template <class T>
|
||||
class StateManager
|
||||
{
|
||||
public:
|
||||
StateManager() { this->_current_state = static_cast<T>(0); }
|
||||
|
||||
virtual ~StateManager() {}
|
||||
|
||||
/*
|
||||
* @brief Sets the state of the stateManager
|
||||
* @param T state - the state to be set
|
||||
*/
|
||||
void setState(T state) { _current_state = state; }
|
||||
|
||||
/*
|
||||
* @brief Returns the current state of the stateManager
|
||||
*/
|
||||
T getCurrentState() { return _current_state; }
|
||||
StateManager(QueueHandle_t eventQueue, QueueHandle_t ledStateQueue);
|
||||
void HandleUpdateState();
|
||||
WiFiState_e GetWifiState();
|
||||
CameraState_e GetCameraState();
|
||||
|
||||
private:
|
||||
T _current_state;
|
||||
QueueHandle_t eventQueue;
|
||||
QueueHandle_t ledStateQueue;
|
||||
|
||||
WiFiState_e wifi_state;
|
||||
MDNSState_e mdns_state;
|
||||
CameraState_e camera_state;
|
||||
StreamState_e stream_state;
|
||||
};
|
||||
|
||||
typedef DeviceStates::WiFiState_e WiFiState_e;
|
||||
typedef DeviceStates::MDNSState_e MDNSState_e;
|
||||
typedef DeviceStates::CameraState_e CameraState_e;
|
||||
typedef DeviceStates::LEDStates_e LEDStates_e;
|
||||
typedef DeviceStates::StreamState_e StreamState_e;
|
||||
typedef DeviceStates::ConfigState_e ConfigState_e;
|
||||
|
||||
extern StateManager<WiFiState_e> wifiStateManager;
|
||||
extern StateManager<MDNSState_e> mdnsStateManager;
|
||||
extern StateManager<CameraState_e> cameraStateManager;
|
||||
extern StateManager<LEDStates_e> ledStateManager;
|
||||
extern StateManager<StreamState_e> streamStateManager;
|
||||
extern StateManager<ConfigState_e> configStateManager;
|
||||
void HandleStateManagerTask(void *pvParameters);
|
||||
|
||||
#endif // STATEMANAGER_HPP
|
||||
|
||||
Reference in New Issue
Block a user