22
22
#ifndef TICKER_H
23
23
#define TICKER_H
24
24
25
- #include < functional >
25
+ #include < Delegate.h >
26
26
#include < Schedule.h>
27
27
#include < ets_sys.h>
28
28
@@ -32,42 +32,42 @@ class Ticker
32
32
Ticker ();
33
33
~Ticker ();
34
34
35
- typedef void (* callback_with_arg_t )( void *) ;
36
- typedef std::function< void (void )> callback_function_t ;
35
+ using callback_t = Delegate< void (), void *> ;
36
+ using callback_with_arg_t = void (void *) ;
37
37
38
38
// callback will be called at following loop() after ticker fires
39
- void attach_scheduled (float seconds, callback_function_t callback)
39
+ void attach_scheduled (float seconds, callback_t callback)
40
40
{
41
- _callback_function = [callback]() { schedule_function (callback); };
42
- _attach_ms (1000UL * seconds, true );
41
+ _callback = [callback]() { schedule_function (callback); };
42
+ _attach_ms (1000UL * seconds, true , _callback, _callback. arg () );
43
43
}
44
44
45
45
// callback will be called in SYS ctx when ticker fires
46
- void attach (float seconds, callback_function_t callback)
46
+ void attach (float seconds, callback_t callback)
47
47
{
48
- _callback_function = std::move (callback);
49
- _attach_ms (1000UL * seconds, true );
48
+ _callback = std::move (callback);
49
+ _attach_ms (1000UL * seconds, true , _callback, _callback. arg () );
50
50
}
51
51
52
52
// callback will be called at following loop() after ticker fires
53
- void attach_ms_scheduled (uint32_t milliseconds, callback_function_t callback)
53
+ void attach_ms_scheduled (uint32_t milliseconds, callback_t callback)
54
54
{
55
- _callback_function = [callback]() { schedule_function (callback); };
56
- _attach_ms (milliseconds, true );
55
+ _callback = [callback]() { schedule_function (callback); };
56
+ _attach_ms (milliseconds, true , _callback, _callback. arg () );
57
57
}
58
58
59
59
// callback will be called at following yield() after ticker fires
60
- void attach_ms_scheduled_accurate (uint32_t milliseconds, callback_function_t callback)
60
+ void attach_ms_scheduled_accurate (uint32_t milliseconds, callback_t callback)
61
61
{
62
- _callback_function = [callback]() { schedule_recurrent_function_us ([callback]() { callback (); return false ; }, 0 ); };
63
- _attach_ms (milliseconds, true );
62
+ _callback = [callback]() { schedule_recurrent_function_us ([callback]() { callback (); return false ; }, 0 ); };
63
+ _attach_ms (milliseconds, true , _callback, _callback. arg () );
64
64
}
65
65
66
66
// callback will be called in SYS ctx when ticker fires
67
- void attach_ms (uint32_t milliseconds, callback_function_t callback)
67
+ void attach_ms (uint32_t milliseconds, callback_t callback)
68
68
{
69
- _callback_function = std::move (callback);
70
- _attach_ms (milliseconds, true );
69
+ _callback = std::move (callback);
70
+ _attach_ms (milliseconds, true , _callback, _callback. arg () );
71
71
}
72
72
73
73
// callback will be called in SYS ctx when ticker fires
@@ -77,7 +77,7 @@ class Ticker
77
77
#pragma GCC diagnostic push
78
78
#pragma GCC diagnostic ignored "-Wcast-function-type"
79
79
static_assert (sizeof (TArg) <= sizeof (void *), " attach() callback argument size must be <= sizeof(void*)" );
80
- _attach_ms (1000UL * seconds, true , reinterpret_cast <callback_with_arg_t >(callback), reinterpret_cast <void *>(arg));
80
+ _attach_ms (1000UL * seconds, true , reinterpret_cast <callback_with_arg_t * >(callback), reinterpret_cast <void *>(arg));
81
81
#pragma GCC diagnostic pop
82
82
}
83
83
@@ -88,67 +88,62 @@ class Ticker
88
88
#pragma GCC diagnostic push
89
89
#pragma GCC diagnostic ignored "-Wcast-function-type"
90
90
static_assert (sizeof (TArg) <= sizeof (void *), " attach() callback argument size must be <= sizeof(void*)" );
91
- _attach_ms (milliseconds, true , reinterpret_cast <callback_with_arg_t >(callback), reinterpret_cast <void *>(arg));
91
+ _attach_ms (milliseconds, true , reinterpret_cast <callback_with_arg_t * >(callback), reinterpret_cast <void *>(arg));
92
92
#pragma GCC diagnostic pop
93
93
}
94
94
95
95
// callback will be called at following loop() after ticker fires
96
- void once_scheduled (float seconds, callback_function_t callback)
96
+ void once_scheduled (float seconds, callback_t callback)
97
97
{
98
- _callback_function = [callback]() { schedule_function (callback); };
99
- _attach_ms (1000UL * seconds, false );
98
+ _callback = [callback]() { schedule_function (callback); };
99
+ _attach_ms (1000UL * seconds, false , _callback, _callback. arg () );
100
100
}
101
101
102
102
// callback will be called in SYS ctx when ticker fires
103
- void once (float seconds, callback_function_t callback)
103
+ void once (float seconds, callback_t callback)
104
104
{
105
- _callback_function = std::move (callback);
106
- _attach_ms (1000UL * seconds, false );
105
+ _callback = std::move (callback);
106
+ _attach_ms (1000UL * seconds, false , _callback, _callback. arg () );
107
107
}
108
108
109
109
// callback will be called at following loop() after ticker fires
110
- void once_ms_scheduled (uint32_t milliseconds, callback_function_t callback)
110
+ void once_ms_scheduled (uint32_t milliseconds, callback_t callback)
111
111
{
112
- _callback_function = [callback]() { schedule_function (callback); };
113
- _attach_ms (milliseconds, false );
112
+ _callback = [callback]() { schedule_function (callback); };
113
+ _attach_ms (milliseconds, false , _callback, _callback. arg () );
114
114
}
115
115
116
116
// callback will be called in SYS ctx when ticker fires
117
- void once_ms (uint32_t milliseconds, callback_function_t callback)
117
+ void once_ms (uint32_t milliseconds, callback_t callback)
118
118
{
119
- _callback_function = std::move (callback);
120
- _attach_ms (milliseconds, false );
119
+ _callback = std::move (callback);
120
+ _attach_ms (milliseconds, false , _callback, _callback. arg () );
121
121
}
122
122
123
123
// callback will be called in SYS ctx when ticker fires
124
124
template <typename TArg>
125
125
void once (float seconds, void (*callback)(TArg), TArg arg)
126
126
{
127
127
static_assert (sizeof (TArg) <= sizeof (void *), " attach() callback argument size must be <= sizeof(void*)" );
128
- _attach_ms (1000UL * seconds, false , reinterpret_cast <callback_with_arg_t >(callback), reinterpret_cast <void *>(arg));
128
+ _attach_ms (1000UL * seconds, false , reinterpret_cast <callback_with_arg_t * >(callback), reinterpret_cast <void *>(arg));
129
129
}
130
130
131
131
// callback will be called in SYS ctx when ticker fires
132
132
template <typename TArg>
133
133
void once_ms (uint32_t milliseconds, void (*callback)(TArg), TArg arg)
134
134
{
135
135
static_assert (sizeof (TArg) <= sizeof (void *), " attach() callback argument size must be <= sizeof(void*)" );
136
- _attach_ms (milliseconds, false , reinterpret_cast <callback_with_arg_t >(callback), reinterpret_cast <void *>(arg));
136
+ _attach_ms (milliseconds, false , reinterpret_cast <callback_with_arg_t * >(callback), reinterpret_cast <void *>(arg));
137
137
}
138
138
139
139
void detach ();
140
140
bool active () const ;
141
141
142
142
protected:
143
- static void _static_callback (void * arg);
144
- void _attach_ms (uint32_t milliseconds, bool repeat, callback_with_arg_t callback, void * arg);
145
- void _attach_ms (uint32_t milliseconds, bool repeat)
146
- {
147
- _attach_ms (milliseconds, repeat, _static_callback, this );
148
- }
143
+ void _attach_ms (uint32_t milliseconds, bool repeat, callback_with_arg_t * callback, void * arg);
149
144
150
145
ETSTimer* _timer;
151
- callback_function_t _callback_function = nullptr ;
146
+ callback_t _callback = nullptr ;
152
147
153
148
private:
154
149
ETSTimer _etsTimer;
0 commit comments