Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Functional and Scheduled callback option to Ticker #4062

Closed
wants to merge 3 commits into from
Closed

Add Functional and Scheduled callback option to Ticker #4062

wants to merge 3 commits into from

Conversation

hreintke
Copy link
Contributor

@hreintke hreintke commented Jan 1, 2018

Add Functional and Scheduled callback option to Ticker

Add Scheduled callback to Ticker

void attach(float seconds, callback_t callback)
void attach(float seconds, TickerFunction tf, bool reqSchedule = false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest making the case for the scheduled function more explicit.

E.g. attach_scheduled(10, myfunc) reads much better than attach(10, myfunc, true).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, why did void attach(float seconds, void (*callback)(TArg), TArg arg) overload not get the version with "scheduled" option?

I would expect to see the product of {attach, once} x {sec, msec} x {no arg, arg} x {normal, scheduled}, i.e. 16 functions.

Copy link

@bertmelis bertmelis Jan 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no point in repeatedly attach the same callback as the callback will run after the loop and there no way (yet?) to stop that. Or do I miss something?

Just asking because I'm using the esp8266's interface in my esp32's version of the Ticker lib.

I like the more explicit version!

@@ -34,17 +36,22 @@ class Ticker
public:
Ticker();
~Ticker();
typedef void (*callback_t)(void);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be better to keep this definition for compatibility. I ran grep on my sketchbook and found a few uses of Ticker::callback_t. Perhaps others could be using it as well.

@@ -24,6 +24,8 @@

#include <stdint.h>
#include <stddef.h>
#include <functional>
#include <Schedule.h>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This header file is probably only needed in Ticker.cpp



protected:
ETSTimer* _timer;
TickerFunction internalTicker = nullptr;
bool scheduleTicker = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of introducing a flag, can we do something like this for the "scheduled" case?

internalTicker = std::bind(schedule_function, tf);

and

internalTicker = tf;

for the normal (not scheduled)?



protected:
ETSTimer* _timer;
TickerFunction internalTicker = nullptr;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency with the rest of this file, please use snake_case for member and function names, and prefix the member names with an underscore. Also, perhaps _callback would be a better name for this member? internalTicker makes it look like there is an instance of Ticker here.

@hreintke
Copy link
Contributor Author

hreintke commented Jan 2, 2018

This is the update for making it conistent with your remarks except

  • Schedule.h include -> now needed in Ticker.h removed from Ticker.cpp
  • void attach(float seconds, void (*callback)(TArg), TArg arg) overload

I did not overload these because they are now just a specific case of the nomal functions

for ticker.attach(10, callback, 0) being scheduled you can use ticker.attach_scheduled (10,std::bind(callback,0));

The first is kept in to have backward compatibility.
If someone needs the scheduled version there need to be a source update anyhow.

If you want the overload still included just let me know

@hreintke
Copy link
Contributor Author

@igrr @devyte
Can you indicate whether you agree with this as a whole or at least with the interface.
If so I will add an example to the PR.

Not sure if I need to rebase as I have seen another PR to the Ticker lib. (#2722)

@igrr
Copy link
Member

igrr commented Jan 12, 2018

@hreintke Yes, please rebase on the current master. Thanks.

@igrr igrr added this to the 2.5.0 milestone Jan 12, 2018
@hreintke
Copy link
Contributor Author

Have some trouble getting it done but will solve it.

@hreintke
Copy link
Contributor Author

Could only rebase by creating a new PR : #4209

@devyte
Copy link
Collaborator

devyte commented Feb 17, 2018

Closing in favor of #4209 .

@devyte devyte closed this Feb 17, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants