| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include <cstdint> | ||
| 4 | #include <variant> | ||
| 5 | |||
| 6 | /** | ||
| 7 | * @brief Event types in the parking system | ||
| 8 | */ | ||
| 9 | enum class EventType { | ||
| 10 | // Hardware Events (from GPIO interrupts) | ||
| 11 | EntryButtonPressed, | ||
| 12 | EntryButtonReleased, | ||
| 13 | EntryLightBarrierBlocked, | ||
| 14 | EntryLightBarrierCleared, | ||
| 15 | ExitLightBarrierBlocked, | ||
| 16 | ExitLightBarrierCleared, | ||
| 17 | |||
| 18 | // System Events | ||
| 19 | CapacityAvailable, | ||
| 20 | CapacityFull, | ||
| 21 | TicketIssued, | ||
| 22 | TicketValidated, | ||
| 23 | TicketRejected, | ||
| 24 | |||
| 25 | // State Events (for logging/monitoring) | ||
| 26 | EntryBarrierOpened, | ||
| 27 | EntryBarrierClosed, | ||
| 28 | ExitBarrierOpened, | ||
| 29 | ExitBarrierClosed, | ||
| 30 | CarEnteredParking, | ||
| 31 | CarExitedParking, | ||
| 32 | |||
| 33 | // Timer Events | ||
| 34 | BarrierTimeout | ||
| 35 | }; | ||
| 36 | |||
| 37 | /** | ||
| 38 | * @brief Event payload types | ||
| 39 | */ | ||
| 40 | using EventPayload = std::variant<std::monostate, uint32_t, bool>; | ||
| 41 | |||
| 42 | /** | ||
| 43 | * @brief Event structure | ||
| 44 | */ | ||
| 45 | struct Event { | ||
| 46 | EventType type; | ||
| 47 | uint64_t timestamp; | ||
| 48 | EventPayload payload; | ||
| 49 | |||
| 50 | ✗ | Event() | |
| 51 | ✗ | : type(EventType::EntryButtonPressed) | |
| 52 | ✗ | , timestamp(0) | |
| 53 | ✗ | , payload(std::monostate{}) {} | |
| 54 | |||
| 55 | 30 | Event(EventType t, uint64_t ts = 0, EventPayload p = std::monostate{}) | |
| 56 | 30 | : type(t) | |
| 57 | 30 | , timestamp(ts) | |
| 58 | 30 | , payload(p) {} | |
| 59 | }; | ||
| 60 | |||
| 61 | /** | ||
| 62 | * @brief Get string representation of EventType | ||
| 63 | */ | ||
| 64 | ✗ | inline const char* eventTypeToString(EventType type) { | |
| 65 | ✗ | switch (type) { | |
| 66 | ✗ | case EventType::EntryButtonPressed: | |
| 67 | ✗ | return "EntryButtonPressed"; | |
| 68 | ✗ | case EventType::EntryButtonReleased: | |
| 69 | ✗ | return "EntryButtonReleased"; | |
| 70 | ✗ | case EventType::EntryLightBarrierBlocked: | |
| 71 | ✗ | return "EntryLightBarrierBlocked"; | |
| 72 | ✗ | case EventType::EntryLightBarrierCleared: | |
| 73 | ✗ | return "EntryLightBarrierCleared"; | |
| 74 | ✗ | case EventType::ExitLightBarrierBlocked: | |
| 75 | ✗ | return "ExitLightBarrierBlocked"; | |
| 76 | ✗ | case EventType::ExitLightBarrierCleared: | |
| 77 | ✗ | return "ExitLightBarrierCleared"; | |
| 78 | ✗ | case EventType::CapacityAvailable: | |
| 79 | ✗ | return "CapacityAvailable"; | |
| 80 | ✗ | case EventType::CapacityFull: | |
| 81 | ✗ | return "CapacityFull"; | |
| 82 | ✗ | case EventType::TicketIssued: | |
| 83 | ✗ | return "TicketIssued"; | |
| 84 | ✗ | case EventType::TicketValidated: | |
| 85 | ✗ | return "TicketValidated"; | |
| 86 | ✗ | case EventType::TicketRejected: | |
| 87 | ✗ | return "TicketRejected"; | |
| 88 | ✗ | case EventType::EntryBarrierOpened: | |
| 89 | ✗ | return "EntryBarrierOpened"; | |
| 90 | ✗ | case EventType::EntryBarrierClosed: | |
| 91 | ✗ | return "EntryBarrierClosed"; | |
| 92 | ✗ | case EventType::ExitBarrierOpened: | |
| 93 | ✗ | return "ExitBarrierOpened"; | |
| 94 | ✗ | case EventType::ExitBarrierClosed: | |
| 95 | ✗ | return "ExitBarrierClosed"; | |
| 96 | ✗ | case EventType::CarEnteredParking: | |
| 97 | ✗ | return "CarEnteredParking"; | |
| 98 | ✗ | case EventType::CarExitedParking: | |
| 99 | ✗ | return "CarExitedParking"; | |
| 100 | ✗ | case EventType::BarrierTimeout: | |
| 101 | ✗ | return "BarrierTimeout"; | |
| 102 | ✗ | default: | |
| 103 | ✗ | return "Unknown"; | |
| 104 | } | ||
| 105 | } | ||
| 106 |