Skip to content

Commit

Permalink
Add methods for defining delay and repeat reactions in microseconds
Browse files Browse the repository at this point in the history
  • Loading branch information
mairas committed Dec 4, 2020
1 parent a13d229 commit 1c97324
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
17 changes: 17 additions & 0 deletions src/ReactESP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down
45 changes: 44 additions & 1 deletion src/ReactESP.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,26 @@ 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)
: Reaction(callback), interval((uint64_t)1000 * (uint64_t)interval) {
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();
Expand All @@ -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();
};
Expand All @@ -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();
};

Expand Down Expand Up @@ -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
*
Expand All @@ -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
*
Expand Down

0 comments on commit 1c97324

Please sign in to comment.