Ersa Wearable Platform
Embedded smartwatch firmware and application framework
Loading...
Searching...
No Matches
event_bus.h
Go to the documentation of this file.
1#pragma once
2
3#include "event.h"
4#include <stdint.h>
5#include <stddef.h>
6
7namespace ersa {
8namespace events {
9
10using SubscriptionId = uint16_t;
11using EventCallback = void (*)(const Event& event, void* userData);
12
14public:
16 virtual ~IEventListener() = default;
18 virtual void onEvent(const Event& event) = 0;
19};
20
29 EventType type{EventType::None}; // None = match all events
35 void* userData{nullptr};
37 bool active{false};
38};
39
48class EventBus {
49public:
51 static constexpr size_t MAX_SUBSCRIBERS = 24;
53 static constexpr size_t MAX_QUEUE = 32;
54
56 EventBus();
57
65 SubscriptionId subscribe(EventType type, EventCallback callback, void* userData = nullptr);
66
69
72
74 void publish(const Event& event);
75
80 bool post(const Event& event);
81
83 size_t dispatchQueue();
84
86 void clear();
87
89 static EventBus& instance();
90
91private:
94
96 size_t queueHead_{0};
97 size_t queueTail_{0};
98 size_t queueCount_{0};
99};
100
101} // namespace events
102} // namespace ersa
Definition event_bus.h:48
size_t queueTail_
Definition event_bus.h:97
size_t queueHead_
Definition event_bus.h:96
static EventBus & instance()
Definition event_bus.cpp:10
size_t queueCount_
Definition event_bus.h:98
SubscriptionId nextSubId_
Definition event_bus.h:93
bool post(const Event &event)
Definition event_bus.cpp:91
size_t dispatchQueue()
Definition event_bus.cpp:101
static constexpr size_t MAX_SUBSCRIBERS
Definition event_bus.h:51
void publish(const Event &event)
Definition event_bus.cpp:76
bool unsubscribe(SubscriptionId id)
Definition event_bus.cpp:63
EventBus()
Definition event_bus.cpp:6
static constexpr size_t MAX_QUEUE
Definition event_bus.h:53
Event queue_[MAX_QUEUE]
Definition event_bus.h:95
Subscription subscribers_[MAX_SUBSCRIBERS]
Definition event_bus.h:92
SubscriptionId subscribe(EventType type, EventCallback callback, void *userData=nullptr)
Definition event_bus.cpp:27
void clear()
Definition event_bus.cpp:15
Definition event_bus.h:13
virtual ~IEventListener()=default
virtual void onEvent(const Event &event)=0
void(*)(const Event &event, void *userData) EventCallback
Definition event_bus.h:11
EventType
Definition event.h:14
uint16_t SubscriptionId
Definition event_bus.h:10
events::EventBus & events()
Definition system.h:45
Definition application.h:10
Definition event.h:134
Definition event_bus.h:25
IEventListener * listener
Definition event_bus.h:33
bool active
Definition event_bus.h:37
EventCallback callback
Definition event_bus.h:31
EventType type
Definition event_bus.h:29
void * userData
Definition event_bus.h:35