From 1c97324d6eb137ea36e72a0dd57f6da73eb0541a Mon Sep 17 00:00:00 2001 From: Matti Airas Date: Mon, 30 Nov 2020 19:49:29 +0200 Subject: [PATCH] Add methods for defining delay and repeat reactions in microseconds --- src/ReactESP.cpp | 17 +++++++++++++++++ src/ReactESP.h | 45 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/ReactESP.cpp b/src/ReactESP.cpp index da10de9..101c139 100644 --- a/src/ReactESP.cpp +++ b/src/ReactESP.cpp @@ -40,6 +40,11 @@ DelayReaction::DelayReaction(uint32_t interval, const react_callback callback) this->last_trigger_time = micros64(); } +DelayReaction::DelayReaction(uint64_t interval, const react_callback callback) + : TimedReaction(interval, callback) { + this->last_trigger_time = micros64(); +} + void DelayReaction::tick() { this->last_trigger_time = micros64(); this->callback(); @@ -143,12 +148,24 @@ DelayReaction* ReactESP::onDelay(const uint32_t t, const react_callback cb) { return dre; } +DelayReaction* ReactESP::onDelayMicros(const uint64_t t, const react_callback cb) { + DelayReaction* dre = new DelayReaction(t, cb); + dre->add(); + return dre; +} + RepeatReaction* ReactESP::onRepeat(const uint32_t t, const react_callback cb) { RepeatReaction* rre = new RepeatReaction(t, cb); rre->add(); return rre; } +RepeatReaction* ReactESP::onRepeatMicros(const uint64_t t, const react_callback cb) { + RepeatReaction* rre = new RepeatReaction(t, cb); + rre->add(); + return rre; +} + StreamReaction* ReactESP::onAvailable(Stream& stream, const react_callback cb) { StreamReaction *sre = new StreamReaction(stream, cb); sre->add(); diff --git a/src/ReactESP.h b/src/ReactESP.h index d19c99a..d24df9c 100644 --- a/src/ReactESP.h +++ b/src/ReactESP.h @@ -51,7 +51,7 @@ class TimedReaction : public Reaction { /** * @brief Construct a new Timed Reaction object * - * @param interval Interval or delay for the reaction + * @param interval Interval or delay for the reaction, in milliseconds * @param callback Function to be called when the reaction is triggered */ TimedReaction(const uint32_t interval, const react_callback callback) @@ -59,6 +59,18 @@ class TimedReaction : public Reaction { last_trigger_time = micros64(); enabled = true; } + /** + * @brief Construct a new Timed Reaction object + * + * @param interval Interval, in microseconds + * @param callback Function to be called when the reaction is triggered + */ + TimedReaction(const uint64_t interval, const react_callback callback) + : Reaction(callback), interval(interval) { + last_trigger_time = micros64(); + enabled = true; + } + virtual ~TimedReaction() {} bool operator<(const TimedReaction& other); void add(); @@ -85,6 +97,13 @@ class DelayReaction : public TimedReaction { * @param callback Function to be called after the delay */ DelayReaction(const uint32_t delay, const react_callback callback); + /** + * @brief Construct a new Delay Reaction object + * + * @param delay Delay, in microseconds + * @param callback Function to be called after the delay + */ + DelayReaction(const uint64_t delay, const react_callback callback); virtual ~DelayReaction() {} void tick(); }; @@ -102,6 +121,14 @@ class RepeatReaction : public TimedReaction { */ RepeatReaction(const uint32_t interval, const react_callback callback) : TimedReaction(interval, callback) {} + /** + * @brief Construct a new Repeat Reaction object + * + * @param interval Repetition interval, in microseconds + * @param callback Function to be called at every repetition + */ + RepeatReaction(const uint64_t interval, const react_callback callback) + : TimedReaction(interval, callback) {} void tick(); }; @@ -212,6 +239,14 @@ class ReactESP { * @return DelayReaction* */ DelayReaction* onDelay(const uint32_t t, const react_callback cb); + /** + * @brief Create a new DelayReaction + * + * @param t Delay, in microseconds + * @param cb Callback function + * @return DelayReaction* + */ + DelayReaction* onDelayMicros(const uint64_t t, const react_callback cb); /** * @brief Create a new RepeatReaction * @@ -220,6 +255,14 @@ class ReactESP { * @return RepeatReaction* */ RepeatReaction* onRepeat(const uint32_t t, const react_callback cb); + /** + * @brief Create a new RepeatReaction + * + * @param t Interval, in microseconds + * @param cb Callback function + * @return RepeatReaction* + */ + RepeatReaction* onRepeatMicros(const uint64_t t, const react_callback cb); /** * @brief Create a new StreamReaction *