Parking Garage Control System
ESP32 Parking Garage – ESP-IDF/FreeRTOS
Loading...
Searching...
No Matches
ExitGateController.h
Go to the documentation of this file.
1#pragma once
2
3#include "IEventBus.h"
4#include "IGate.h"
5#include "ITicketService.h"
6#include "freertos/FreeRTOS.h"
7#include "freertos/timers.h"
8#include <memory>
9
22
36 public:
46 IEventBus& eventBus,
47 IGate& gate,
48 ITicketService& ticketService,
49 uint32_t barrierTimeoutMs = 2000,
50 uint32_t validationTimeMs = 500);
51
53
54 // Prevent copying
57
61 [[nodiscard]] ExitGateState getState() const { return m_state; }
62
66 [[nodiscard]] const char* getStateString() const;
67
71 [[nodiscard]] IGate& getGate() { return *m_gate; }
72
78 bool validateTicketManually(uint32_t ticketId);
79
85
90 void reset();
91
92#ifdef UNIT_TEST
93 // Test helpers to simulate timer expirations without FreeRTOS timers
94 void TEST_forceBarrierTimeout() {
95 onBarrierTimeout();
96 }
97 void TEST_forceValidationTimeout() {
98 onValidationTimeout();
99 }
100#endif
101
102 private:
103 void onLightBarrierBlocked(const Event& event);
104 void onLightBarrierCleared(const Event& event);
105 void onBarrierTimeout();
106 void onValidationTimeout();
107
108 void setState(ExitGateState newState);
109 void startBarrierTimer();
110 void stopBarrierTimer();
111 void startValidationTimer();
112 void stopValidationTimer();
113
114 static void barrierTimerCallback(TimerHandle_t xTimer);
115 static void validationTimerCallback(TimerHandle_t xTimer);
116
117 IEventBus& m_eventBus;
118 IGate* m_gate;
119 ITicketService& m_ticketService;
120
121 ExitGateState m_state;
122 uint32_t m_barrierTimeoutMs;
123 uint32_t m_validationTimeMs;
124 uint32_t m_currentTicketId;
125 TimerHandle_t m_barrierTimer;
126 TimerHandle_t m_validationTimer;
127};
ExitGateState
Exit gate state machine states.
Definition ExitGateController.h:13
Exit gate controller with state machine.
Definition ExitGateController.h:35
~ExitGateController()
Definition ExitGateController.cpp:46
ExitGateController(const ExitGateController &)=delete
const char * getStateString() const
Get state as string.
Definition ExitGateController.cpp:78
void setupGpioInterrupts()
Setup GPIO interrupts Call this after construction to enable hardware interrupts.
Definition ExitGateController.cpp:55
IGate & getGate()
Get gate reference (for debugging/console commands)
Definition ExitGateController.h:71
void reset()
Reset controller to initial state Stops timers, resets state to Idle, clears current ticket,...
Definition ExitGateController.cpp:59
ExitGateState getState() const
Get current state.
Definition ExitGateController.h:61
ExitGateController & operator=(const ExitGateController &)=delete
bool validateTicketManually(uint32_t ticketId)
Manually validate ticket (for console commands)
Definition ExitGateController.cpp:138
Interface for event bus.
Definition IEventBus.h:12
Gate interface for barrier control abstraction.
Definition IGate.h:9
Interface for ticket service.
Definition ITicketService.h:13
Event structure.
Definition Event.h:45
Coverage