19uint64_t ICACHE_RAM_ATTR micros64();
37 virtual void add() = 0;
187 const uint8_t pin_number;
191 static bool isr_service_installed;
192 static void isr(
void* arg);
206 pin_number(pin_number),
209 gpio_int_type_t intr_type;
212 intr_type = GPIO_INTR_POSEDGE;
215 intr_type = GPIO_INTR_NEGEDGE;
218 intr_type = GPIO_INTR_ANYEDGE;
221 intr_type = GPIO_INTR_DISABLE;
225 gpio_set_intr_type((gpio_num_t)pin_number, intr_type);
227 if (!isr_service_installed) {
228 gpio_install_isr_service(ESP_INTR_FLAG_LOWMED);
229 isr_service_installed =
true;
329 std::priority_queue<TimedReaction*, std::vector<TimedReaction*>,
332 std::forward_list<UntimedReaction*> untimed_list;
333 std::forward_list<ISRReaction*> isr_reaction_list;
334 std::forward_list<ISRReaction*> isr_pending_list;
void(* isr_react_callback)(void *)
std::function< void()> react_callback
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.
ISRReaction(uint8_t pin_number, int mode, const react_callback callback)
Construct a new ISRReaction object.
Main class of a ReactESP program.
ISRReaction * onInterrupt(const uint8_t pin_number, int mode, const react_callback cb)
Create a new ISRReaction (interrupt reaction)
static ReactESP * app
Static singleton reference to the instantiated ReactESP object.
RepeatReaction * onRepeatMicros(const uint64_t t, const react_callback cb)
Create a new RepeatReaction.
ReactESP(const react_callback cb)
Construct a new ReactESP object.
TickReaction * onTick(const react_callback cb)
Create a new TickReaction.
StreamReaction * onAvailable(Stream &stream, const react_callback cb)
Create a new StreamReaction.
DelayReaction * onDelay(const uint32_t t, const react_callback cb)
Create a new DelayReaction.
DelayReaction * onDelayMicros(const uint64_t t, const react_callback cb)
Create a new DelayReaction.
RepeatReaction * onRepeat(const uint32_t t, const react_callback cb)
Create a new RepeatReaction.
Reactions are code to be called when a given condition is fulfilled.
const react_callback callback
Reaction(react_callback callback)
Construct a new Reaction object.
Reaction that is triggered repeatedly.
RepeatReaction(const uint64_t interval, const react_callback callback)
Construct a new Repeat Reaction object.
RepeatReaction(const uint32_t interval, const react_callback callback)
Construct a new Repeat Reaction object.
Reaction that is triggered when there is input available at the given Arduino Stream.
StreamReaction(Stream &stream, const react_callback callback)
Construct a new Stream Reaction object.
Reaction that is triggered unconditionally at each execution loop.
TickReaction(const react_callback callback)
Construct a new Tick Reaction object.
TimedReactions are called based on elapsing of time.
uint64_t last_trigger_time
bool operator<(const TimedReaction &other)
Return the current time since the device restart in microseconds.
TimedReaction(const uint64_t interval, const react_callback callback)
Construct a new Timed Reaction object.
uint64_t getTriggerTimeMicros()
uint32_t getTriggerTime()
TimedReaction(const uint32_t interval, const react_callback callback)
Construct a new Timed Reaction object.
Reactions that are triggered based on something else than time.
UntimedReaction(const react_callback callback)
virtual ~UntimedReaction()
void ICACHE_RAM_ATTR isr()
bool operator()(TimedReaction *a, TimedReaction *b)