mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-15 12:33:46 +02:00
98 lines
2.4 KiB
C++
98 lines
2.4 KiB
C++
#include "StateManager.hpp"
|
|
|
|
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::WiFiStateConnecting;
|
|
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
|
}
|
|
if (this->wifi_state == WiFiState_e::WiFiState_Connected)
|
|
{
|
|
ledStreamState = LEDStates_e::WiFiStateConnected;
|
|
xQueueSend(this->ledStateQueue, &ledStreamState, 10);
|
|
}
|
|
if (this->wifi_state == WiFiState_e::WiFiState_Error)
|
|
{
|
|
ledStreamState = LEDStates_e::WiFiStateError;
|
|
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::CameraError;
|
|
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)
|
|
{
|
|
auto *stateManager = static_cast<StateManager *>(pvParameters);
|
|
|
|
while (true)
|
|
{
|
|
stateManager->HandleUpdateState();
|
|
}
|
|
} |