Sound Byte Libs 1ee2ca6
C++ firmware library for audio applications on 32-bit ARM Cortex-M processors
Loading...
Searching...
No Matches
event_broadcaster.hpp
Go to the documentation of this file.
1#ifndef SBL_CORE_PATTERNS_EVENTS_EVENT_BROADCASTER_HPP_
2#define SBL_CORE_PATTERNS_EVENTS_EVENT_BROADCASTER_HPP_
3
4/**
5 * @file event_broadcaster.hpp
6 * @brief Generic event broadcasting for coordinating multiple outputs
7 * @ingroup patterns
8 *
9 * Template-based event coordination without domain-specific logic.
10 * Manages multiple output devices that respond to events.
11 */
12
13namespace sbl {
14namespace core {
15namespace patterns {
16namespace events {
17
18/**
19 * @brief Generic event broadcaster for two outputs
20 *
21 * Simplified broadcaster for two output types, avoiding complex
22 * variadic template constructs. Applications can compose multiple
23 * broadcasters if more outputs are needed.
24 *
25 * @tparam Output1Type First output device type
26 * @tparam Output2Type Second output device type
27 */
28template<typename Output1Type, typename Output2Type>
30public:
31 /**
32 * @brief Construct event broadcaster with two outputs
33 * @param output1 Reference to first output device
34 * @param output2 Reference to second output device
35 */
36 EventBroadcaster(Output1Type& output1, Output2Type& output2)
37 : output1_(output1), output2_(output2) {}
38
39 /**
40 * @brief Trigger all outputs
41 */
42 void trigger() {
43 triggerOutput(output1_);
44 triggerOutput(output2_);
45 }
46
47 /**
48 * @brief Update all outputs
49 */
50 void update() {
51 output1_.update();
52 output2_.update();
53 }
54
55private:
56 Output1Type& output1_;
57 Output2Type& output2_;
58
59 // Use flash() method for LED-like outputs
60 template<typename T>
61 void triggerOutput(T& output) {
62 output.flash();
63 }
64};
65
66/**
67 * @brief Specialized broadcaster for FlashLed and Trigger types
68 *
69 * Template specialization that calls appropriate methods:
70 * - flash() for FlashLed
71 * - fire() for Trigger
72 */
73template<typename FlashLedType, typename TriggerType>
75public:
76 FlashLedTriggerBroadcaster(FlashLedType& flashLed, TriggerType& trigger)
77 : flashLed_(flashLed), trigger_(trigger) {}
78
79 void trigger() {
80 flashLed_.flash();
81 trigger_.fire();
82 }
83
84 void update() {
85 flashLed_.update();
86 trigger_.update();
87 }
88
89private:
90 FlashLedType& flashLed_;
91 TriggerType& trigger_;
92};
93
94} // namespace events
95} // namespace patterns
96} // namespace core
97} // namespace sbl
98
99#endif // SBL_CORE_PATTERNS_EVENTS_EVENT_BROADCASTER_HPP_
Generic event broadcaster for two outputs.
EventBroadcaster(Output1Type &output1, Output2Type &output2)
Construct event broadcaster with two outputs.
Specialized broadcaster for FlashLed and Trigger types.
FlashLedTriggerBroadcaster(FlashLedType &flashLed, TriggerType &trigger)
Root namespace for all Sound Byte Libs functionality.
Definition aliases.hpp:24