204 const uint8_t pin_number;
208 static bool isr_service_installed;
209 static void isr(
void* this_ptr);
224 gpio_int_type_t intr_type;
227 intr_type = GPIO_INTR_POSEDGE;
230 intr_type = GPIO_INTR_NEGEDGE;
233 intr_type = GPIO_INTR_ANYEDGE;
236 intr_type = GPIO_INTR_DISABLE;
240 gpio_set_intr_type((gpio_num_t)pin_number, intr_type);
242 if (!isr_service_installed) {
243 isr_service_installed =
true;
244 gpio_install_isr_service(ESP_INTR_FLAG_LOWMED);
272 : timed_queue(), untimed_list(), isr_event_list(), isr_pending_list() {
351 std::priority_queue<TimedEvent*, std::vector<TimedEvent*>,
354 std::forward_list<UntimedEvent*> untimed_list;
355 std::forward_list<ISREvent*> isr_event_list;
356 std::forward_list<ISREvent*> isr_pending_list;
Event that is triggered after a certain time delay.
DelayEvent(uint32_t delay, react_callback callback)
Construct a new Delay Event object.
void tick(EventLoop *event_loop) override
Events are code to be called when a given condition is fulfilled.
const react_callback callback
Event & operator=(Event &&)=delete
Event & operator=(const Event &)=delete
Event(react_callback callback)
Construct a new Event object.
Event(const Event &)=delete
Main event loop of a EventLoop program.
DelayEvent * onDelayMicros(uint64_t delay, react_callback callback)
Create a new DelayEvent.
EventLoop(EventLoop &&)=delete
EventLoop()
Construct a new EventLoop object.
StreamEvent * onAvailable(Stream &stream, react_callback callback)
Create a new StreamEvent.
TickEvent * onTick(react_callback callback)
Create a new TickEvent.
DelayEvent * onDelay(uint32_t delay, react_callback callback)
Create a new DelayEvent.
RepeatEvent * onRepeatMicros(uint64_t interval, react_callback callback)
Create a new RepeatEvent.
EventLoop & operator=(const EventLoop &)=delete
EventLoop & operator=(EventLoop &&)=delete
ISREvent * onInterrupt(uint8_t pin_number, int mode, react_callback callback)
Create a new ISREvent (interrupt event)
RepeatEvent * onRepeat(uint32_t interval, react_callback callback)
Create a new RepeatEvent.
void remove(Event *event)
Remove a event from the list of active events.
EventLoop(const EventLoop &)=delete
Event that is triggered on an input pin change.
void remove(EventLoop *event_loop) override
void tick(EventLoop *event_loop) override
ISREvent(uint8_t pin_number, int mode, react_callback callback)
Construct a new ISREvent object.
void add(EventLoop *event_loop) override
Event that is triggered repeatedly.
RepeatEvent(uint32_t interval, react_callback callback)
Construct a new Repeat Event object.
void tick(EventLoop *event_loop) override
RepeatEvent(uint64_t interval, react_callback callback)
Construct a new Repeat Event object.
Event that is triggered when there is input available at the given Arduino Stream.
StreamEvent(Stream &stream, react_callback callback)
Construct a new Stream Event object.
void tick(EventLoop *event_loop) override
Event that is triggered unconditionally at each execution loop.
TickEvent(react_callback callback)
Construct a new Tick Event object.
void tick(EventLoop *event_loop) override
TimedEvents are called based on elapsing of time.
uint64_t getTriggerTimeMicros() const
TimedEvent(uint64_t interval, react_callback callback)
Construct a new Timed Event object.
void add(EventLoop *event_loop) override
void remove(EventLoop *event_loop) override
bool operator<(const TimedEvent &other) const
uint64_t last_trigger_time
uint32_t getTriggerTime() const
TimedEvent(uint32_t interval, react_callback callback)
Construct a new Timed Event object.
Events that are triggered based on something else than time.
UntimedEvent(react_callback callback)
void add(EventLoop *event_loop) override
void remove(EventLoop *event_loop) override
std::function< void()> react_callback
void(*)(void *) isr_react_callback
EventInterface defines the interface for all events.
virtual ~EventInterface()=default
Default virtual destructor.
virtual void add(EventLoop *event_loop)=0
virtual void tick(EventLoop *event_loop)=0
virtual void remove(EventLoop *event_loop)=0
bool operator()(TimedEvent *a, TimedEvent *b)