4#include <FunctionalInterrupt.h>
17uint64_t ICACHE_RAM_ATTR micros64() {
return esp_timer_get_time(); }
53 auto now = micros64();
71 if (stream.available()) {
79bool ISRReaction::isr_service_installed =
false;
81void ISRReaction::isr(
void* this_ptr) {
89 gpio_isr_handler_add((gpio_num_t)pin_number, ISRReaction::isr, (
void*)
this);
91 attachInterrupt(digitalPinToInterrupt(pin_number),
callback, mode);
99 gpio_isr_handler_remove((gpio_num_t)pin_number);
100#elif defined(ESP8266)
101 detachInterrupt(digitalPinToInterrupt(this->pin_number));
109void ReactESP::tickTimed() {
110 uint64_t now = micros64();
115 if (timed_queue.empty()) {
118 top = timed_queue.top();
125 if (now >= trigger_t) {
134void ReactESP::tickUntimed() {
Reaction that is triggered after a certain time delay.
DelayReaction(const uint32_t delay, const react_callback callback)
Construct a new Delay Reaction object.
Reaction that is triggered on an input pin change.
Main class of a ReactESP program.
StreamReaction * onAvailable(Stream &stream, const react_callback cb)
Create a new StreamReaction.
DelayReaction * onDelayMicros(const uint64_t t, const react_callback cb)
Create a new DelayReaction.
friend class RepeatReaction
DelayReaction * onDelay(const uint32_t t, const react_callback cb)
Create a new DelayReaction.
static ReactESP * app
Static singleton reference to the instantiated ReactESP object.
RepeatReaction * onRepeat(const uint32_t t, const react_callback cb)
Create a new RepeatReaction.
friend class UntimedReaction
RepeatReaction * onRepeatMicros(const uint64_t t, const react_callback cb)
Create a new RepeatReaction.
TickReaction * onTick(const react_callback cb)
Create a new TickReaction.
ISRReaction * onInterrupt(const uint8_t pin_number, int mode, const react_callback cb)
Create a new ISRReaction (interrupt reaction)
const react_callback callback
Reaction that is triggered repeatedly.
Reaction that is triggered when there is input available at the given Arduino Stream.
Reaction that is triggered unconditionally at each execution loop.
TimedReactions are called based on elapsing of time.
bool operator<(const TimedReaction &other)
Return the current time since the device restart in microseconds.
uint64_t getTriggerTimeMicros()
uint64_t last_trigger_time
std::function< void()> react_callback