This is a fork of the `events` subdirectory of https://github.com/ARMmbed/mbed-os

Dependents:   HelloWorld_CCA01M1 HelloWorld_CCA02M1 CI-data-logger-server HelloWorld_CCA02M1 ... more

This is a fork of the events subdirectory of https://github.com/ARMmbed/mbed-os.

Note, you must import this library with import name: events!!!

Committer:
Jimmy Brisson
Date:
Tue Apr 04 14:21:53 2017 -0500
Revision:
9822:fb4e93c12c32
Parent:
15:42ba4ffdf78d
Child:
9825:e033ed92ed49
Update class documentation tags

stop using scope for \addtogroup. It was placing class methods into the
group documentation instead of the class documentation. The new style is
to explicitly tag the class as @ingroup. This new method will allow the
class to be linked in the group page, and the class page will contain
the detailed documentation of the class methods.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bogdan Marinescu 0:a792d4bf36c2 1 /* events
Bogdan Marinescu 0:a792d4bf36c2 2 * Copyright (c) 2016 ARM Limited
Bogdan Marinescu 0:a792d4bf36c2 3 *
Bogdan Marinescu 0:a792d4bf36c2 4 * Licensed under the Apache License, Version 2.0 (the "License");
Bogdan Marinescu 0:a792d4bf36c2 5 * you may not use this file except in compliance with the License.
Bogdan Marinescu 0:a792d4bf36c2 6 * You may obtain a copy of the License at
Bogdan Marinescu 0:a792d4bf36c2 7 *
Bogdan Marinescu 0:a792d4bf36c2 8 * http://www.apache.org/licenses/LICENSE-2.0
Bogdan Marinescu 0:a792d4bf36c2 9 *
Bogdan Marinescu 0:a792d4bf36c2 10 * Unless required by applicable law or agreed to in writing, software
Bogdan Marinescu 0:a792d4bf36c2 11 * distributed under the License is distributed on an "AS IS" BASIS,
Bogdan Marinescu 0:a792d4bf36c2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Bogdan Marinescu 0:a792d4bf36c2 13 * See the License for the specific language governing permissions and
Bogdan Marinescu 0:a792d4bf36c2 14 * limitations under the License.
Bogdan Marinescu 0:a792d4bf36c2 15 */
Bogdan Marinescu 0:a792d4bf36c2 16 #ifndef EVENT_H
Bogdan Marinescu 0:a792d4bf36c2 17 #define EVENT_H
Bogdan Marinescu 0:a792d4bf36c2 18
Sam Grove 2:a60d8117d0e0 19 #include "events/EventQueue.h"
Sam Grove 2:a60d8117d0e0 20 #include "platform/mbed_assert.h"
Bogdan Marinescu 0:a792d4bf36c2 21
Bogdan Marinescu 0:a792d4bf36c2 22 namespace events {
Jimmy Brisson 5:705843a08e16 23 /** \addtogroup events */
Bogdan Marinescu 0:a792d4bf36c2 24
Bogdan Marinescu 0:a792d4bf36c2 25 /** Event
Bogdan Marinescu 0:a792d4bf36c2 26 *
Bogdan Marinescu 0:a792d4bf36c2 27 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 28 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 29 */
Bogdan Marinescu 0:a792d4bf36c2 30 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 31 class Event;
Bogdan Marinescu 0:a792d4bf36c2 32
Bogdan Marinescu 0:a792d4bf36c2 33 /** Event
Bogdan Marinescu 0:a792d4bf36c2 34 *
Bogdan Marinescu 0:a792d4bf36c2 35 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 36 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 37 */
Bogdan Marinescu 0:a792d4bf36c2 38 template <>
Bogdan Marinescu 0:a792d4bf36c2 39 class Event<void()> {
Bogdan Marinescu 0:a792d4bf36c2 40 public:
Bogdan Marinescu 0:a792d4bf36c2 41 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 42 *
Bogdan Marinescu 0:a792d4bf36c2 43 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 44 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 45 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 46 *
Bogdan Marinescu 0:a792d4bf36c2 47 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 48 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 49 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 50 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 51 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 52 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 53 */
Bogdan Marinescu 0:a792d4bf36c2 54 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 55 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 56 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 57 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 58
Bogdan Marinescu 0:a792d4bf36c2 59 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 60 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 61 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 62 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 63 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 64
Christopher Haster 4:f157c7bf01cc 65 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 66 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 67
Bogdan Marinescu 0:a792d4bf36c2 68 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 69
Bogdan Marinescu 0:a792d4bf36c2 70 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 71 }
Bogdan Marinescu 0:a792d4bf36c2 72 }
Bogdan Marinescu 0:a792d4bf36c2 73
Bogdan Marinescu 0:a792d4bf36c2 74 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 75 */
Bogdan Marinescu 0:a792d4bf36c2 76 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 77 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 78 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 79 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 80 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 81 }
Bogdan Marinescu 0:a792d4bf36c2 82 }
Bogdan Marinescu 0:a792d4bf36c2 83
Bogdan Marinescu 0:a792d4bf36c2 84 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 85 */
Bogdan Marinescu 0:a792d4bf36c2 86 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 87 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 88 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 89 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 90 }
Bogdan Marinescu 0:a792d4bf36c2 91
Bogdan Marinescu 0:a792d4bf36c2 92 return *this;
Bogdan Marinescu 0:a792d4bf36c2 93 }
Bogdan Marinescu 0:a792d4bf36c2 94
Bogdan Marinescu 0:a792d4bf36c2 95 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 96 */
Bogdan Marinescu 0:a792d4bf36c2 97 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 98 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 99 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 100 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 101 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 102 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 103 }
Bogdan Marinescu 0:a792d4bf36c2 104 }
Bogdan Marinescu 0:a792d4bf36c2 105 }
Bogdan Marinescu 0:a792d4bf36c2 106
Bogdan Marinescu 0:a792d4bf36c2 107 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 108 *
Bogdan Marinescu 0:a792d4bf36c2 109 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 110 */
Bogdan Marinescu 0:a792d4bf36c2 111 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 112 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 113 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 114 }
Bogdan Marinescu 0:a792d4bf36c2 115 }
Bogdan Marinescu 0:a792d4bf36c2 116
Bogdan Marinescu 0:a792d4bf36c2 117 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 118 *
Bogdan Marinescu 0:a792d4bf36c2 119 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 120 */
Bogdan Marinescu 0:a792d4bf36c2 121 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 122 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 123 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 124 }
Bogdan Marinescu 0:a792d4bf36c2 125 }
Bogdan Marinescu 0:a792d4bf36c2 126
Bogdan Marinescu 0:a792d4bf36c2 127 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 128 *
Bogdan Marinescu 0:a792d4bf36c2 129 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 130 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 131 *
Bogdan Marinescu 0:a792d4bf36c2 132 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 133 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 134 *
Bogdan Marinescu 0:a792d4bf36c2 135 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 136 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 137 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 138 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 139 */
Bogdan Marinescu 0:a792d4bf36c2 140 int post() const {
Bogdan Marinescu 0:a792d4bf36c2 141 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 142 return 0;
Bogdan Marinescu 0:a792d4bf36c2 143 }
Bogdan Marinescu 0:a792d4bf36c2 144
Bogdan Marinescu 0:a792d4bf36c2 145 _event->id = _event->post(_event);
Bogdan Marinescu 0:a792d4bf36c2 146 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 147 }
Bogdan Marinescu 0:a792d4bf36c2 148
Bogdan Marinescu 0:a792d4bf36c2 149 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 150 *
Bogdan Marinescu 0:a792d4bf36c2 151 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 152 */
Bogdan Marinescu 0:a792d4bf36c2 153 void call() const {
Christopher Haster 8:773de146a61c 154 MBED_UNUSED int id = post();
Bogdan Marinescu 0:a792d4bf36c2 155 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 156 }
Bogdan Marinescu 0:a792d4bf36c2 157
Bogdan Marinescu 0:a792d4bf36c2 158 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 159 *
Bogdan Marinescu 0:a792d4bf36c2 160 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 161 */
Bogdan Marinescu 0:a792d4bf36c2 162 void operator()() const {
Bogdan Marinescu 0:a792d4bf36c2 163 return call();
Bogdan Marinescu 0:a792d4bf36c2 164 }
Bogdan Marinescu 0:a792d4bf36c2 165
Bogdan Marinescu 0:a792d4bf36c2 166 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 167 *
Bogdan Marinescu 0:a792d4bf36c2 168 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 169 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 170 */
Bogdan Marinescu 0:a792d4bf36c2 171 static void thunk(void *func) {
Bogdan Marinescu 0:a792d4bf36c2 172 return static_cast<Event*>(func)->call();
Bogdan Marinescu 0:a792d4bf36c2 173 }
Bogdan Marinescu 0:a792d4bf36c2 174
Bogdan Marinescu 0:a792d4bf36c2 175 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 176 *
Bogdan Marinescu 0:a792d4bf36c2 177 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 178 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 179 *
Bogdan Marinescu 0:a792d4bf36c2 180 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 181 *
Bogdan Marinescu 0:a792d4bf36c2 182 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 183 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 184 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 185 */
Bogdan Marinescu 0:a792d4bf36c2 186 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 187 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 188 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 189 }
Bogdan Marinescu 0:a792d4bf36c2 190 }
Bogdan Marinescu 0:a792d4bf36c2 191
Bogdan Marinescu 0:a792d4bf36c2 192 private:
Bogdan Marinescu 0:a792d4bf36c2 193 struct event {
Bogdan Marinescu 0:a792d4bf36c2 194 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 195 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 196 int id;
Bogdan Marinescu 0:a792d4bf36c2 197
Bogdan Marinescu 0:a792d4bf36c2 198 int delay;
Bogdan Marinescu 0:a792d4bf36c2 199 int period;
Bogdan Marinescu 0:a792d4bf36c2 200
Bogdan Marinescu 0:a792d4bf36c2 201 int (*post)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 202 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 203
Bogdan Marinescu 0:a792d4bf36c2 204 // F follows
Bogdan Marinescu 0:a792d4bf36c2 205 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 206
Christopher Haster 4:f157c7bf01cc 207 // Event attributes
Christopher Haster 4:f157c7bf01cc 208 template <typename F>
Christopher Haster 4:f157c7bf01cc 209 static int event_post(struct event *e) {
Christopher Haster 4:f157c7bf01cc 210 typedef EventQueue::context00<F> C;
Christopher Haster 4:f157c7bf01cc 211 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 212 if (!p) {
Christopher Haster 4:f157c7bf01cc 213 return 0;
Christopher Haster 4:f157c7bf01cc 214 }
Christopher Haster 4:f157c7bf01cc 215
Christopher Haster 4:f157c7bf01cc 216 new (p) C(*(F*)(e + 1));
Christopher Haster 4:f157c7bf01cc 217 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 218 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 219 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 220 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 221 }
Christopher Haster 4:f157c7bf01cc 222
Christopher Haster 4:f157c7bf01cc 223 template <typename F>
Christopher Haster 4:f157c7bf01cc 224 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 225 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 226 }
Christopher Haster 4:f157c7bf01cc 227
Bogdan Marinescu 0:a792d4bf36c2 228 public:
Bogdan Marinescu 0:a792d4bf36c2 229 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 230 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 231 */
Bogdan Marinescu 0:a792d4bf36c2 232 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 233 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 234 new (this) Event(q, EventQueue::context10<F, C0>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 235 }
Bogdan Marinescu 0:a792d4bf36c2 236
Bogdan Marinescu 0:a792d4bf36c2 237 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 238 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 239 */
Bogdan Marinescu 0:a792d4bf36c2 240 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 241 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 242 new (this) Event(q, EventQueue::context20<F, C0, C1>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 243 }
Bogdan Marinescu 0:a792d4bf36c2 244
Bogdan Marinescu 0:a792d4bf36c2 245 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 246 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 247 */
Bogdan Marinescu 0:a792d4bf36c2 248 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 249 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 250 new (this) Event(q, EventQueue::context30<F, C0, C1, C2>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 251 }
Bogdan Marinescu 0:a792d4bf36c2 252
Bogdan Marinescu 0:a792d4bf36c2 253 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 254 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 255 */
Bogdan Marinescu 0:a792d4bf36c2 256 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 257 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 258 new (this) Event(q, EventQueue::context40<F, C0, C1, C2, C3>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 259 }
Bogdan Marinescu 0:a792d4bf36c2 260
Bogdan Marinescu 0:a792d4bf36c2 261 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 262 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 263 */
Bogdan Marinescu 0:a792d4bf36c2 264 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 265 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 266 new (this) Event(q, EventQueue::context50<F, C0, C1, C2, C3, C4>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 267 }
Bogdan Marinescu 0:a792d4bf36c2 268
Bogdan Marinescu 0:a792d4bf36c2 269 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 270 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 271 */
Bogdan Marinescu 0:a792d4bf36c2 272 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 273 Event(EventQueue *q, T *obj, R (T::*method)(B0), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 274 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 275 }
Bogdan Marinescu 0:a792d4bf36c2 276
Bogdan Marinescu 0:a792d4bf36c2 277 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 278 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 279 */
Bogdan Marinescu 0:a792d4bf36c2 280 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 281 Event(EventQueue *q, const T *obj, R (T::*method)(B0) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 282 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 283 }
Bogdan Marinescu 0:a792d4bf36c2 284
Bogdan Marinescu 0:a792d4bf36c2 285 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 286 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 287 */
Bogdan Marinescu 0:a792d4bf36c2 288 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 289 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 290 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 291 }
Bogdan Marinescu 0:a792d4bf36c2 292
Bogdan Marinescu 0:a792d4bf36c2 293 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 294 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 295 */
Bogdan Marinescu 0:a792d4bf36c2 296 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 297 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 298 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 299 }
Bogdan Marinescu 0:a792d4bf36c2 300
Bogdan Marinescu 0:a792d4bf36c2 301 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 302 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 303 */
Bogdan Marinescu 0:a792d4bf36c2 304 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 305 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 306 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 307 }
Bogdan Marinescu 0:a792d4bf36c2 308
Bogdan Marinescu 0:a792d4bf36c2 309 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 310 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 311 */
Bogdan Marinescu 0:a792d4bf36c2 312 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 313 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 314 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 315 }
Bogdan Marinescu 0:a792d4bf36c2 316
Bogdan Marinescu 0:a792d4bf36c2 317 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 318 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 319 */
Bogdan Marinescu 0:a792d4bf36c2 320 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 321 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 322 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 323 }
Bogdan Marinescu 0:a792d4bf36c2 324
Bogdan Marinescu 0:a792d4bf36c2 325 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 326 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 327 */
Bogdan Marinescu 0:a792d4bf36c2 328 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 329 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 330 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 331 }
Bogdan Marinescu 0:a792d4bf36c2 332
Bogdan Marinescu 0:a792d4bf36c2 333 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 334 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 335 */
Bogdan Marinescu 0:a792d4bf36c2 336 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 337 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 338 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 339 }
Bogdan Marinescu 0:a792d4bf36c2 340
Bogdan Marinescu 0:a792d4bf36c2 341 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 342 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 343 */
Bogdan Marinescu 0:a792d4bf36c2 344 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 345 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 346 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 347 }
Bogdan Marinescu 0:a792d4bf36c2 348
Bogdan Marinescu 0:a792d4bf36c2 349 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 350 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 351 */
Bogdan Marinescu 0:a792d4bf36c2 352 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 353 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 354 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 355 }
Bogdan Marinescu 0:a792d4bf36c2 356
Bogdan Marinescu 0:a792d4bf36c2 357 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 358 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 359 */
Bogdan Marinescu 0:a792d4bf36c2 360 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 361 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 362 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 363 }
Bogdan Marinescu 0:a792d4bf36c2 364
Bogdan Marinescu 0:a792d4bf36c2 365 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 366 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 367 */
Bogdan Marinescu 0:a792d4bf36c2 368 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 369 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 370 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 371 }
Bogdan Marinescu 0:a792d4bf36c2 372
Bogdan Marinescu 0:a792d4bf36c2 373 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 374 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 375 */
Bogdan Marinescu 0:a792d4bf36c2 376 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 377 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 378 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 379 }
Bogdan Marinescu 0:a792d4bf36c2 380
Bogdan Marinescu 0:a792d4bf36c2 381 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 382 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 383 */
Bogdan Marinescu 0:a792d4bf36c2 384 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 385 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 386 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 387 }
Bogdan Marinescu 0:a792d4bf36c2 388
Bogdan Marinescu 0:a792d4bf36c2 389 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 390 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 391 */
Bogdan Marinescu 0:a792d4bf36c2 392 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 393 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 394 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 395 }
Bogdan Marinescu 0:a792d4bf36c2 396
Bogdan Marinescu 0:a792d4bf36c2 397 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 398 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 399 */
Bogdan Marinescu 0:a792d4bf36c2 400 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 401 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 402 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 403 }
Bogdan Marinescu 0:a792d4bf36c2 404
Bogdan Marinescu 0:a792d4bf36c2 405 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 406 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 407 */
Bogdan Marinescu 0:a792d4bf36c2 408 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 409 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 410 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 411 }
Bogdan Marinescu 0:a792d4bf36c2 412
Bogdan Marinescu 0:a792d4bf36c2 413 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 414 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 415 */
Bogdan Marinescu 0:a792d4bf36c2 416 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 417 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 418 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 419 }
Bogdan Marinescu 0:a792d4bf36c2 420
Bogdan Marinescu 0:a792d4bf36c2 421 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 422 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 423 */
Bogdan Marinescu 0:a792d4bf36c2 424 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 425 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 426 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 427 }
Bogdan Marinescu 0:a792d4bf36c2 428 };
Bogdan Marinescu 0:a792d4bf36c2 429
Bogdan Marinescu 0:a792d4bf36c2 430 /** Event
Bogdan Marinescu 0:a792d4bf36c2 431 *
Bogdan Marinescu 0:a792d4bf36c2 432 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 433 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 434 */
Bogdan Marinescu 0:a792d4bf36c2 435 template <typename A0>
Bogdan Marinescu 0:a792d4bf36c2 436 class Event<void(A0)> {
Bogdan Marinescu 0:a792d4bf36c2 437 public:
Bogdan Marinescu 0:a792d4bf36c2 438 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 439 *
Bogdan Marinescu 0:a792d4bf36c2 440 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 441 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 442 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 443 *
Bogdan Marinescu 0:a792d4bf36c2 444 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 445 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 446 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 447 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 448 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 449 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 450 */
Bogdan Marinescu 0:a792d4bf36c2 451 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 452 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 453 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 454 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 455
Bogdan Marinescu 0:a792d4bf36c2 456 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 457 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 458 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 459 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 460 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 461
Christopher Haster 4:f157c7bf01cc 462 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 463 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 464
Bogdan Marinescu 0:a792d4bf36c2 465 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 466
Bogdan Marinescu 0:a792d4bf36c2 467 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 468 }
Bogdan Marinescu 0:a792d4bf36c2 469 }
Bogdan Marinescu 0:a792d4bf36c2 470
Bogdan Marinescu 0:a792d4bf36c2 471 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 472 */
Bogdan Marinescu 0:a792d4bf36c2 473 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 474 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 475 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 476 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 477 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 478 }
Bogdan Marinescu 0:a792d4bf36c2 479 }
Bogdan Marinescu 0:a792d4bf36c2 480
Bogdan Marinescu 0:a792d4bf36c2 481 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 482 */
Bogdan Marinescu 0:a792d4bf36c2 483 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 484 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 485 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 486 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 487 }
Bogdan Marinescu 0:a792d4bf36c2 488
Bogdan Marinescu 0:a792d4bf36c2 489 return *this;
Bogdan Marinescu 0:a792d4bf36c2 490 }
Bogdan Marinescu 0:a792d4bf36c2 491
Bogdan Marinescu 0:a792d4bf36c2 492 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 493 */
Bogdan Marinescu 0:a792d4bf36c2 494 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 495 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 496 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 497 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 498 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 499 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 500 }
Bogdan Marinescu 0:a792d4bf36c2 501 }
Bogdan Marinescu 0:a792d4bf36c2 502 }
Bogdan Marinescu 0:a792d4bf36c2 503
Bogdan Marinescu 0:a792d4bf36c2 504 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 505 *
Bogdan Marinescu 0:a792d4bf36c2 506 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 507 */
Bogdan Marinescu 0:a792d4bf36c2 508 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 509 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 510 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 511 }
Bogdan Marinescu 0:a792d4bf36c2 512 }
Bogdan Marinescu 0:a792d4bf36c2 513
Bogdan Marinescu 0:a792d4bf36c2 514 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 515 *
Bogdan Marinescu 0:a792d4bf36c2 516 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 517 */
Bogdan Marinescu 0:a792d4bf36c2 518 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 519 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 520 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 521 }
Bogdan Marinescu 0:a792d4bf36c2 522 }
Bogdan Marinescu 0:a792d4bf36c2 523
Bogdan Marinescu 0:a792d4bf36c2 524 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 525 *
Bogdan Marinescu 0:a792d4bf36c2 526 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 527 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 528 *
Bogdan Marinescu 0:a792d4bf36c2 529 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 530 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 531 *
Bogdan Marinescu 0:a792d4bf36c2 532 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 533 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 534 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 535 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 536 */
Bogdan Marinescu 0:a792d4bf36c2 537 int post(A0 a0) const {
Bogdan Marinescu 0:a792d4bf36c2 538 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 539 return 0;
Bogdan Marinescu 0:a792d4bf36c2 540 }
Bogdan Marinescu 0:a792d4bf36c2 541
Bogdan Marinescu 0:a792d4bf36c2 542 _event->id = _event->post(_event, a0);
Bogdan Marinescu 0:a792d4bf36c2 543 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 544 }
Bogdan Marinescu 0:a792d4bf36c2 545
Bogdan Marinescu 0:a792d4bf36c2 546 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 547 *
Bogdan Marinescu 0:a792d4bf36c2 548 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 549 */
Bogdan Marinescu 0:a792d4bf36c2 550 void call(A0 a0) const {
Christopher Haster 8:773de146a61c 551 MBED_UNUSED int id = post(a0);
Bogdan Marinescu 0:a792d4bf36c2 552 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 553 }
Bogdan Marinescu 0:a792d4bf36c2 554
Bogdan Marinescu 0:a792d4bf36c2 555 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 556 *
Bogdan Marinescu 0:a792d4bf36c2 557 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 558 */
Bogdan Marinescu 0:a792d4bf36c2 559 void operator()(A0 a0) const {
Bogdan Marinescu 0:a792d4bf36c2 560 return call(a0);
Bogdan Marinescu 0:a792d4bf36c2 561 }
Bogdan Marinescu 0:a792d4bf36c2 562
Bogdan Marinescu 0:a792d4bf36c2 563 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 564 *
Bogdan Marinescu 0:a792d4bf36c2 565 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 566 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 567 */
Bogdan Marinescu 0:a792d4bf36c2 568 static void thunk(void *func, A0 a0) {
Bogdan Marinescu 0:a792d4bf36c2 569 return static_cast<Event*>(func)->call(a0);
Bogdan Marinescu 0:a792d4bf36c2 570 }
Bogdan Marinescu 0:a792d4bf36c2 571
Bogdan Marinescu 0:a792d4bf36c2 572 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 573 *
Bogdan Marinescu 0:a792d4bf36c2 574 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 575 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 576 *
Bogdan Marinescu 0:a792d4bf36c2 577 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 578 *
Bogdan Marinescu 0:a792d4bf36c2 579 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 580 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 581 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 582 */
Bogdan Marinescu 0:a792d4bf36c2 583 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 584 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 585 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 586 }
Bogdan Marinescu 0:a792d4bf36c2 587 }
Bogdan Marinescu 0:a792d4bf36c2 588
Bogdan Marinescu 0:a792d4bf36c2 589 private:
Bogdan Marinescu 0:a792d4bf36c2 590 struct event {
Bogdan Marinescu 0:a792d4bf36c2 591 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 592 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 593 int id;
Bogdan Marinescu 0:a792d4bf36c2 594
Bogdan Marinescu 0:a792d4bf36c2 595 int delay;
Bogdan Marinescu 0:a792d4bf36c2 596 int period;
Bogdan Marinescu 0:a792d4bf36c2 597
Bogdan Marinescu 0:a792d4bf36c2 598 int (*post)(struct event *, A0 a0);
Bogdan Marinescu 0:a792d4bf36c2 599 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 600
Bogdan Marinescu 0:a792d4bf36c2 601 // F follows
Bogdan Marinescu 0:a792d4bf36c2 602 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 603
Christopher Haster 4:f157c7bf01cc 604 // Event attributes
Christopher Haster 4:f157c7bf01cc 605 template <typename F>
Christopher Haster 4:f157c7bf01cc 606 static int event_post(struct event *e, A0 a0) {
Christopher Haster 4:f157c7bf01cc 607 typedef EventQueue::context10<F, A0> C;
Christopher Haster 4:f157c7bf01cc 608 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 609 if (!p) {
Christopher Haster 4:f157c7bf01cc 610 return 0;
Christopher Haster 4:f157c7bf01cc 611 }
Christopher Haster 4:f157c7bf01cc 612
Christopher Haster 4:f157c7bf01cc 613 new (p) C(*(F*)(e + 1), a0);
Christopher Haster 4:f157c7bf01cc 614 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 615 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 616 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 617 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 618 }
Christopher Haster 4:f157c7bf01cc 619
Christopher Haster 4:f157c7bf01cc 620 template <typename F>
Christopher Haster 4:f157c7bf01cc 621 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 622 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 623 }
Christopher Haster 4:f157c7bf01cc 624
Bogdan Marinescu 0:a792d4bf36c2 625 public:
Bogdan Marinescu 0:a792d4bf36c2 626 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 627 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 628 */
Bogdan Marinescu 0:a792d4bf36c2 629 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 630 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 631 new (this) Event(q, EventQueue::context11<F, C0, A0>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 632 }
Bogdan Marinescu 0:a792d4bf36c2 633
Bogdan Marinescu 0:a792d4bf36c2 634 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 635 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 636 */
Bogdan Marinescu 0:a792d4bf36c2 637 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 638 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 639 new (this) Event(q, EventQueue::context21<F, C0, C1, A0>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 640 }
Bogdan Marinescu 0:a792d4bf36c2 641
Bogdan Marinescu 0:a792d4bf36c2 642 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 643 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 644 */
Bogdan Marinescu 0:a792d4bf36c2 645 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 646 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 647 new (this) Event(q, EventQueue::context31<F, C0, C1, C2, A0>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 648 }
Bogdan Marinescu 0:a792d4bf36c2 649
Bogdan Marinescu 0:a792d4bf36c2 650 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 651 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 652 */
Bogdan Marinescu 0:a792d4bf36c2 653 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 654 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 655 new (this) Event(q, EventQueue::context41<F, C0, C1, C2, C3, A0>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 656 }
Bogdan Marinescu 0:a792d4bf36c2 657
Bogdan Marinescu 0:a792d4bf36c2 658 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 659 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 660 */
Bogdan Marinescu 0:a792d4bf36c2 661 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 662 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 663 new (this) Event(q, EventQueue::context51<F, C0, C1, C2, C3, C4, A0>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 664 }
Bogdan Marinescu 0:a792d4bf36c2 665
Bogdan Marinescu 0:a792d4bf36c2 666 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 667 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 668 */
Bogdan Marinescu 0:a792d4bf36c2 669 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 670 Event(EventQueue *q, T *obj, R (T::*method)(B0, A0), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 671 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 672 }
Bogdan Marinescu 0:a792d4bf36c2 673
Bogdan Marinescu 0:a792d4bf36c2 674 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 675 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 676 */
Bogdan Marinescu 0:a792d4bf36c2 677 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 678 Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 679 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 680 }
Bogdan Marinescu 0:a792d4bf36c2 681
Bogdan Marinescu 0:a792d4bf36c2 682 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 683 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 684 */
Bogdan Marinescu 0:a792d4bf36c2 685 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 686 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 687 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 688 }
Bogdan Marinescu 0:a792d4bf36c2 689
Bogdan Marinescu 0:a792d4bf36c2 690 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 691 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 692 */
Bogdan Marinescu 0:a792d4bf36c2 693 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 694 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 695 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 696 }
Bogdan Marinescu 0:a792d4bf36c2 697
Bogdan Marinescu 0:a792d4bf36c2 698 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 699 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 700 */
Bogdan Marinescu 0:a792d4bf36c2 701 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 702 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 703 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 704 }
Bogdan Marinescu 0:a792d4bf36c2 705
Bogdan Marinescu 0:a792d4bf36c2 706 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 707 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 708 */
Bogdan Marinescu 0:a792d4bf36c2 709 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 710 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 711 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 712 }
Bogdan Marinescu 0:a792d4bf36c2 713
Bogdan Marinescu 0:a792d4bf36c2 714 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 715 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 716 */
Bogdan Marinescu 0:a792d4bf36c2 717 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 718 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 719 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 720 }
Bogdan Marinescu 0:a792d4bf36c2 721
Bogdan Marinescu 0:a792d4bf36c2 722 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 723 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 724 */
Bogdan Marinescu 0:a792d4bf36c2 725 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 726 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 727 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 728 }
Bogdan Marinescu 0:a792d4bf36c2 729
Bogdan Marinescu 0:a792d4bf36c2 730 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 731 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 732 */
Bogdan Marinescu 0:a792d4bf36c2 733 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 734 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 735 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 736 }
Bogdan Marinescu 0:a792d4bf36c2 737
Bogdan Marinescu 0:a792d4bf36c2 738 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 739 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 740 */
Bogdan Marinescu 0:a792d4bf36c2 741 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 742 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 743 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 744 }
Bogdan Marinescu 0:a792d4bf36c2 745
Bogdan Marinescu 0:a792d4bf36c2 746 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 747 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 748 */
Bogdan Marinescu 0:a792d4bf36c2 749 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 750 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 751 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 752 }
Bogdan Marinescu 0:a792d4bf36c2 753
Bogdan Marinescu 0:a792d4bf36c2 754 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 755 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 756 */
Bogdan Marinescu 0:a792d4bf36c2 757 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 758 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 759 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 760 }
Bogdan Marinescu 0:a792d4bf36c2 761
Bogdan Marinescu 0:a792d4bf36c2 762 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 763 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 764 */
Bogdan Marinescu 0:a792d4bf36c2 765 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 766 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 767 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 768 }
Bogdan Marinescu 0:a792d4bf36c2 769
Bogdan Marinescu 0:a792d4bf36c2 770 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 771 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 772 */
Bogdan Marinescu 0:a792d4bf36c2 773 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 774 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 775 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 776 }
Bogdan Marinescu 0:a792d4bf36c2 777
Bogdan Marinescu 0:a792d4bf36c2 778 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 779 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 780 */
Bogdan Marinescu 0:a792d4bf36c2 781 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 782 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 783 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 784 }
Bogdan Marinescu 0:a792d4bf36c2 785
Bogdan Marinescu 0:a792d4bf36c2 786 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 787 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 788 */
Bogdan Marinescu 0:a792d4bf36c2 789 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 790 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 791 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 792 }
Bogdan Marinescu 0:a792d4bf36c2 793
Bogdan Marinescu 0:a792d4bf36c2 794 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 795 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 796 */
Bogdan Marinescu 0:a792d4bf36c2 797 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 798 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 799 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 800 }
Bogdan Marinescu 0:a792d4bf36c2 801
Bogdan Marinescu 0:a792d4bf36c2 802 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 803 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 804 */
Bogdan Marinescu 0:a792d4bf36c2 805 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 806 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 807 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 808 }
Bogdan Marinescu 0:a792d4bf36c2 809
Bogdan Marinescu 0:a792d4bf36c2 810 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 811 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 812 */
Bogdan Marinescu 0:a792d4bf36c2 813 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 814 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 815 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 816 }
Bogdan Marinescu 0:a792d4bf36c2 817
Bogdan Marinescu 0:a792d4bf36c2 818 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 819 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 820 */
Bogdan Marinescu 0:a792d4bf36c2 821 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 822 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 823 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 824 }
Bogdan Marinescu 0:a792d4bf36c2 825 };
Bogdan Marinescu 0:a792d4bf36c2 826
Bogdan Marinescu 0:a792d4bf36c2 827 /** Event
Bogdan Marinescu 0:a792d4bf36c2 828 *
Bogdan Marinescu 0:a792d4bf36c2 829 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 830 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 831 */
Bogdan Marinescu 0:a792d4bf36c2 832 template <typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 833 class Event<void(A0, A1)> {
Bogdan Marinescu 0:a792d4bf36c2 834 public:
Bogdan Marinescu 0:a792d4bf36c2 835 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 836 *
Bogdan Marinescu 0:a792d4bf36c2 837 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 838 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 839 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 840 *
Bogdan Marinescu 0:a792d4bf36c2 841 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 842 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 843 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 844 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 845 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 846 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 847 */
Bogdan Marinescu 0:a792d4bf36c2 848 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 849 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 850 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 851 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 852
Bogdan Marinescu 0:a792d4bf36c2 853 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 854 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 855 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 856 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 857 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 858
Christopher Haster 4:f157c7bf01cc 859 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 860 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 861
Bogdan Marinescu 0:a792d4bf36c2 862 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 863
Bogdan Marinescu 0:a792d4bf36c2 864 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 865 }
Bogdan Marinescu 0:a792d4bf36c2 866 }
Bogdan Marinescu 0:a792d4bf36c2 867
Bogdan Marinescu 0:a792d4bf36c2 868 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 869 */
Bogdan Marinescu 0:a792d4bf36c2 870 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 871 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 872 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 873 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 874 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 875 }
Bogdan Marinescu 0:a792d4bf36c2 876 }
Bogdan Marinescu 0:a792d4bf36c2 877
Bogdan Marinescu 0:a792d4bf36c2 878 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 879 */
Bogdan Marinescu 0:a792d4bf36c2 880 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 881 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 882 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 883 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 884 }
Bogdan Marinescu 0:a792d4bf36c2 885
Bogdan Marinescu 0:a792d4bf36c2 886 return *this;
Bogdan Marinescu 0:a792d4bf36c2 887 }
Bogdan Marinescu 0:a792d4bf36c2 888
Bogdan Marinescu 0:a792d4bf36c2 889 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 890 */
Bogdan Marinescu 0:a792d4bf36c2 891 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 892 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 893 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 894 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 895 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 896 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 897 }
Bogdan Marinescu 0:a792d4bf36c2 898 }
Bogdan Marinescu 0:a792d4bf36c2 899 }
Bogdan Marinescu 0:a792d4bf36c2 900
Bogdan Marinescu 0:a792d4bf36c2 901 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 902 *
Bogdan Marinescu 0:a792d4bf36c2 903 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 904 */
Bogdan Marinescu 0:a792d4bf36c2 905 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 906 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 907 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 908 }
Bogdan Marinescu 0:a792d4bf36c2 909 }
Bogdan Marinescu 0:a792d4bf36c2 910
Bogdan Marinescu 0:a792d4bf36c2 911 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 912 *
Bogdan Marinescu 0:a792d4bf36c2 913 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 914 */
Bogdan Marinescu 0:a792d4bf36c2 915 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 916 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 917 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 918 }
Bogdan Marinescu 0:a792d4bf36c2 919 }
Bogdan Marinescu 0:a792d4bf36c2 920
Bogdan Marinescu 0:a792d4bf36c2 921 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 922 *
Bogdan Marinescu 0:a792d4bf36c2 923 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 924 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 925 *
Bogdan Marinescu 0:a792d4bf36c2 926 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 927 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 928 *
Bogdan Marinescu 0:a792d4bf36c2 929 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 930 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 931 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 932 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 933 */
Bogdan Marinescu 0:a792d4bf36c2 934 int post(A0 a0, A1 a1) const {
Bogdan Marinescu 0:a792d4bf36c2 935 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 936 return 0;
Bogdan Marinescu 0:a792d4bf36c2 937 }
Bogdan Marinescu 0:a792d4bf36c2 938
Bogdan Marinescu 0:a792d4bf36c2 939 _event->id = _event->post(_event, a0, a1);
Bogdan Marinescu 0:a792d4bf36c2 940 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 941 }
Bogdan Marinescu 0:a792d4bf36c2 942
Bogdan Marinescu 0:a792d4bf36c2 943 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 944 *
Bogdan Marinescu 0:a792d4bf36c2 945 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 946 */
Bogdan Marinescu 0:a792d4bf36c2 947 void call(A0 a0, A1 a1) const {
Christopher Haster 8:773de146a61c 948 MBED_UNUSED int id = post(a0, a1);
Bogdan Marinescu 0:a792d4bf36c2 949 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 950 }
Bogdan Marinescu 0:a792d4bf36c2 951
Bogdan Marinescu 0:a792d4bf36c2 952 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 953 *
Bogdan Marinescu 0:a792d4bf36c2 954 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 955 */
Bogdan Marinescu 0:a792d4bf36c2 956 void operator()(A0 a0, A1 a1) const {
Bogdan Marinescu 0:a792d4bf36c2 957 return call(a0, a1);
Bogdan Marinescu 0:a792d4bf36c2 958 }
Bogdan Marinescu 0:a792d4bf36c2 959
Bogdan Marinescu 0:a792d4bf36c2 960 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 961 *
Bogdan Marinescu 0:a792d4bf36c2 962 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 963 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 964 */
Bogdan Marinescu 0:a792d4bf36c2 965 static void thunk(void *func, A0 a0, A1 a1) {
Bogdan Marinescu 0:a792d4bf36c2 966 return static_cast<Event*>(func)->call(a0, a1);
Bogdan Marinescu 0:a792d4bf36c2 967 }
Bogdan Marinescu 0:a792d4bf36c2 968
Bogdan Marinescu 0:a792d4bf36c2 969 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 970 *
Bogdan Marinescu 0:a792d4bf36c2 971 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 972 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 973 *
Bogdan Marinescu 0:a792d4bf36c2 974 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 975 *
Bogdan Marinescu 0:a792d4bf36c2 976 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 977 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 978 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 979 */
Bogdan Marinescu 0:a792d4bf36c2 980 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 981 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 982 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 983 }
Bogdan Marinescu 0:a792d4bf36c2 984 }
Bogdan Marinescu 0:a792d4bf36c2 985
Bogdan Marinescu 0:a792d4bf36c2 986 private:
Bogdan Marinescu 0:a792d4bf36c2 987 struct event {
Bogdan Marinescu 0:a792d4bf36c2 988 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 989 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 990 int id;
Bogdan Marinescu 0:a792d4bf36c2 991
Bogdan Marinescu 0:a792d4bf36c2 992 int delay;
Bogdan Marinescu 0:a792d4bf36c2 993 int period;
Bogdan Marinescu 0:a792d4bf36c2 994
Bogdan Marinescu 0:a792d4bf36c2 995 int (*post)(struct event *, A0 a0, A1 a1);
Bogdan Marinescu 0:a792d4bf36c2 996 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 997
Bogdan Marinescu 0:a792d4bf36c2 998 // F follows
Bogdan Marinescu 0:a792d4bf36c2 999 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 1000
Christopher Haster 4:f157c7bf01cc 1001 // Event attributes
Christopher Haster 4:f157c7bf01cc 1002 template <typename F>
Christopher Haster 4:f157c7bf01cc 1003 static int event_post(struct event *e, A0 a0, A1 a1) {
Christopher Haster 4:f157c7bf01cc 1004 typedef EventQueue::context20<F, A0, A1> C;
Christopher Haster 4:f157c7bf01cc 1005 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 1006 if (!p) {
Christopher Haster 4:f157c7bf01cc 1007 return 0;
Christopher Haster 4:f157c7bf01cc 1008 }
Christopher Haster 4:f157c7bf01cc 1009
Christopher Haster 4:f157c7bf01cc 1010 new (p) C(*(F*)(e + 1), a0, a1);
Christopher Haster 4:f157c7bf01cc 1011 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 1012 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 1013 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 1014 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 1015 }
Christopher Haster 4:f157c7bf01cc 1016
Christopher Haster 4:f157c7bf01cc 1017 template <typename F>
Christopher Haster 4:f157c7bf01cc 1018 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 1019 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 1020 }
Christopher Haster 4:f157c7bf01cc 1021
Bogdan Marinescu 0:a792d4bf36c2 1022 public:
Bogdan Marinescu 0:a792d4bf36c2 1023 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1024 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1025 */
Bogdan Marinescu 0:a792d4bf36c2 1026 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 1027 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 1028 new (this) Event(q, EventQueue::context12<F, C0, A0, A1>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 1029 }
Bogdan Marinescu 0:a792d4bf36c2 1030
Bogdan Marinescu 0:a792d4bf36c2 1031 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1032 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1033 */
Bogdan Marinescu 0:a792d4bf36c2 1034 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 1035 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 1036 new (this) Event(q, EventQueue::context22<F, C0, C1, A0, A1>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 1037 }
Bogdan Marinescu 0:a792d4bf36c2 1038
Bogdan Marinescu 0:a792d4bf36c2 1039 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1040 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1041 */
Bogdan Marinescu 0:a792d4bf36c2 1042 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 1043 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 1044 new (this) Event(q, EventQueue::context32<F, C0, C1, C2, A0, A1>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 1045 }
Bogdan Marinescu 0:a792d4bf36c2 1046
Bogdan Marinescu 0:a792d4bf36c2 1047 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1048 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1049 */
Bogdan Marinescu 0:a792d4bf36c2 1050 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 1051 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 1052 new (this) Event(q, EventQueue::context42<F, C0, C1, C2, C3, A0, A1>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 1053 }
Bogdan Marinescu 0:a792d4bf36c2 1054
Bogdan Marinescu 0:a792d4bf36c2 1055 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1056 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1057 */
Bogdan Marinescu 0:a792d4bf36c2 1058 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 1059 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 1060 new (this) Event(q, EventQueue::context52<F, C0, C1, C2, C3, C4, A0, A1>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 1061 }
Bogdan Marinescu 0:a792d4bf36c2 1062
Bogdan Marinescu 0:a792d4bf36c2 1063 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1064 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1065 */
Bogdan Marinescu 0:a792d4bf36c2 1066 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1067 Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1068 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1069 }
Bogdan Marinescu 0:a792d4bf36c2 1070
Bogdan Marinescu 0:a792d4bf36c2 1071 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1072 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1073 */
Bogdan Marinescu 0:a792d4bf36c2 1074 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1075 Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1076 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1077 }
Bogdan Marinescu 0:a792d4bf36c2 1078
Bogdan Marinescu 0:a792d4bf36c2 1079 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1080 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1081 */
Bogdan Marinescu 0:a792d4bf36c2 1082 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1083 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1084 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1085 }
Bogdan Marinescu 0:a792d4bf36c2 1086
Bogdan Marinescu 0:a792d4bf36c2 1087 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1088 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1089 */
Bogdan Marinescu 0:a792d4bf36c2 1090 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1091 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1092 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1093 }
Bogdan Marinescu 0:a792d4bf36c2 1094
Bogdan Marinescu 0:a792d4bf36c2 1095 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1096 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1097 */
Bogdan Marinescu 0:a792d4bf36c2 1098 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1099 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1100 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1101 }
Bogdan Marinescu 0:a792d4bf36c2 1102
Bogdan Marinescu 0:a792d4bf36c2 1103 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1104 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1105 */
Bogdan Marinescu 0:a792d4bf36c2 1106 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1107 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1108 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1109 }
Bogdan Marinescu 0:a792d4bf36c2 1110
Bogdan Marinescu 0:a792d4bf36c2 1111 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1112 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1113 */
Bogdan Marinescu 0:a792d4bf36c2 1114 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1115 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1116 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1117 }
Bogdan Marinescu 0:a792d4bf36c2 1118
Bogdan Marinescu 0:a792d4bf36c2 1119 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1120 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1121 */
Bogdan Marinescu 0:a792d4bf36c2 1122 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1123 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1124 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1125 }
Bogdan Marinescu 0:a792d4bf36c2 1126
Bogdan Marinescu 0:a792d4bf36c2 1127 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1128 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1129 */
Bogdan Marinescu 0:a792d4bf36c2 1130 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1131 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1132 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1133 }
Bogdan Marinescu 0:a792d4bf36c2 1134
Bogdan Marinescu 0:a792d4bf36c2 1135 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1136 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1137 */
Bogdan Marinescu 0:a792d4bf36c2 1138 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1139 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1140 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1141 }
Bogdan Marinescu 0:a792d4bf36c2 1142
Bogdan Marinescu 0:a792d4bf36c2 1143 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1144 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1145 */
Bogdan Marinescu 0:a792d4bf36c2 1146 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1147 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1148 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1149 }
Bogdan Marinescu 0:a792d4bf36c2 1150
Bogdan Marinescu 0:a792d4bf36c2 1151 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1152 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1153 */
Bogdan Marinescu 0:a792d4bf36c2 1154 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1155 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1156 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1157 }
Bogdan Marinescu 0:a792d4bf36c2 1158
Bogdan Marinescu 0:a792d4bf36c2 1159 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1160 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1161 */
Bogdan Marinescu 0:a792d4bf36c2 1162 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1163 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1164 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1165 }
Bogdan Marinescu 0:a792d4bf36c2 1166
Bogdan Marinescu 0:a792d4bf36c2 1167 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1168 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1169 */
Bogdan Marinescu 0:a792d4bf36c2 1170 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1171 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1172 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1173 }
Bogdan Marinescu 0:a792d4bf36c2 1174
Bogdan Marinescu 0:a792d4bf36c2 1175 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1176 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1177 */
Bogdan Marinescu 0:a792d4bf36c2 1178 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1179 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1180 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1181 }
Bogdan Marinescu 0:a792d4bf36c2 1182
Bogdan Marinescu 0:a792d4bf36c2 1183 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1184 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1185 */
Bogdan Marinescu 0:a792d4bf36c2 1186 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1187 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1188 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1189 }
Bogdan Marinescu 0:a792d4bf36c2 1190
Bogdan Marinescu 0:a792d4bf36c2 1191 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1192 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1193 */
Bogdan Marinescu 0:a792d4bf36c2 1194 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1195 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1196 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1197 }
Bogdan Marinescu 0:a792d4bf36c2 1198
Bogdan Marinescu 0:a792d4bf36c2 1199 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1200 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1201 */
Bogdan Marinescu 0:a792d4bf36c2 1202 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1203 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1204 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1205 }
Bogdan Marinescu 0:a792d4bf36c2 1206
Bogdan Marinescu 0:a792d4bf36c2 1207 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1208 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1209 */
Bogdan Marinescu 0:a792d4bf36c2 1210 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1211 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1212 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1213 }
Bogdan Marinescu 0:a792d4bf36c2 1214
Bogdan Marinescu 0:a792d4bf36c2 1215 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1216 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1217 */
Bogdan Marinescu 0:a792d4bf36c2 1218 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1219 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1220 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1221 }
Bogdan Marinescu 0:a792d4bf36c2 1222 };
Bogdan Marinescu 0:a792d4bf36c2 1223
Bogdan Marinescu 0:a792d4bf36c2 1224 /** Event
Bogdan Marinescu 0:a792d4bf36c2 1225 *
Bogdan Marinescu 0:a792d4bf36c2 1226 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 1227 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 1228 */
Bogdan Marinescu 0:a792d4bf36c2 1229 template <typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 1230 class Event<void(A0, A1, A2)> {
Bogdan Marinescu 0:a792d4bf36c2 1231 public:
Bogdan Marinescu 0:a792d4bf36c2 1232 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1233 *
Bogdan Marinescu 0:a792d4bf36c2 1234 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 1235 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 1236 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 1237 *
Bogdan Marinescu 0:a792d4bf36c2 1238 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 1239 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 1240 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 1241 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 1242 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 1243 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 1244 */
Bogdan Marinescu 0:a792d4bf36c2 1245 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 1246 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 1247 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 1248 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 1249
Bogdan Marinescu 0:a792d4bf36c2 1250 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1251 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 1252 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 1253 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 1254 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 1255
Christopher Haster 4:f157c7bf01cc 1256 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 1257 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 1258
Bogdan Marinescu 0:a792d4bf36c2 1259 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 1260
Bogdan Marinescu 0:a792d4bf36c2 1261 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 1262 }
Bogdan Marinescu 0:a792d4bf36c2 1263 }
Bogdan Marinescu 0:a792d4bf36c2 1264
Bogdan Marinescu 0:a792d4bf36c2 1265 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 1266 */
Bogdan Marinescu 0:a792d4bf36c2 1267 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 1268 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 1269 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 1270 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 1271 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 1272 }
Bogdan Marinescu 0:a792d4bf36c2 1273 }
Bogdan Marinescu 0:a792d4bf36c2 1274
Bogdan Marinescu 0:a792d4bf36c2 1275 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 1276 */
Bogdan Marinescu 0:a792d4bf36c2 1277 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 1278 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 1279 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 1280 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 1281 }
Bogdan Marinescu 0:a792d4bf36c2 1282
Bogdan Marinescu 0:a792d4bf36c2 1283 return *this;
Bogdan Marinescu 0:a792d4bf36c2 1284 }
Bogdan Marinescu 0:a792d4bf36c2 1285
Bogdan Marinescu 0:a792d4bf36c2 1286 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 1287 */
Bogdan Marinescu 0:a792d4bf36c2 1288 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 1289 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1290 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 1291 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 1292 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 1293 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 1294 }
Bogdan Marinescu 0:a792d4bf36c2 1295 }
Bogdan Marinescu 0:a792d4bf36c2 1296 }
Bogdan Marinescu 0:a792d4bf36c2 1297
Bogdan Marinescu 0:a792d4bf36c2 1298 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 1299 *
Bogdan Marinescu 0:a792d4bf36c2 1300 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 1301 */
Bogdan Marinescu 0:a792d4bf36c2 1302 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 1303 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1304 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 1305 }
Bogdan Marinescu 0:a792d4bf36c2 1306 }
Bogdan Marinescu 0:a792d4bf36c2 1307
Bogdan Marinescu 0:a792d4bf36c2 1308 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 1309 *
Bogdan Marinescu 0:a792d4bf36c2 1310 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 1311 */
Bogdan Marinescu 0:a792d4bf36c2 1312 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 1313 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1314 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 1315 }
Bogdan Marinescu 0:a792d4bf36c2 1316 }
Bogdan Marinescu 0:a792d4bf36c2 1317
Bogdan Marinescu 0:a792d4bf36c2 1318 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 1319 *
Bogdan Marinescu 0:a792d4bf36c2 1320 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 1321 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 1322 *
Bogdan Marinescu 0:a792d4bf36c2 1323 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 1324 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 1325 *
Bogdan Marinescu 0:a792d4bf36c2 1326 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1327 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 1328 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 1329 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 1330 */
Bogdan Marinescu 0:a792d4bf36c2 1331 int post(A0 a0, A1 a1, A2 a2) const {
Bogdan Marinescu 0:a792d4bf36c2 1332 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 1333 return 0;
Bogdan Marinescu 0:a792d4bf36c2 1334 }
Bogdan Marinescu 0:a792d4bf36c2 1335
Bogdan Marinescu 0:a792d4bf36c2 1336 _event->id = _event->post(_event, a0, a1, a2);
Bogdan Marinescu 0:a792d4bf36c2 1337 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 1338 }
Bogdan Marinescu 0:a792d4bf36c2 1339
Bogdan Marinescu 0:a792d4bf36c2 1340 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 1341 *
Bogdan Marinescu 0:a792d4bf36c2 1342 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1343 */
Bogdan Marinescu 0:a792d4bf36c2 1344 void call(A0 a0, A1 a1, A2 a2) const {
Christopher Haster 8:773de146a61c 1345 MBED_UNUSED int id = post(a0, a1, a2);
Bogdan Marinescu 0:a792d4bf36c2 1346 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 1347 }
Bogdan Marinescu 0:a792d4bf36c2 1348
Bogdan Marinescu 0:a792d4bf36c2 1349 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 1350 *
Bogdan Marinescu 0:a792d4bf36c2 1351 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1352 */
Bogdan Marinescu 0:a792d4bf36c2 1353 void operator()(A0 a0, A1 a1, A2 a2) const {
Bogdan Marinescu 0:a792d4bf36c2 1354 return call(a0, a1, a2);
Bogdan Marinescu 0:a792d4bf36c2 1355 }
Bogdan Marinescu 0:a792d4bf36c2 1356
Bogdan Marinescu 0:a792d4bf36c2 1357 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 1358 *
Bogdan Marinescu 0:a792d4bf36c2 1359 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 1360 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1361 */
Bogdan Marinescu 0:a792d4bf36c2 1362 static void thunk(void *func, A0 a0, A1 a1, A2 a2) {
Bogdan Marinescu 0:a792d4bf36c2 1363 return static_cast<Event*>(func)->call(a0, a1, a2);
Bogdan Marinescu 0:a792d4bf36c2 1364 }
Bogdan Marinescu 0:a792d4bf36c2 1365
Bogdan Marinescu 0:a792d4bf36c2 1366 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 1367 *
Bogdan Marinescu 0:a792d4bf36c2 1368 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 1369 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 1370 *
Bogdan Marinescu 0:a792d4bf36c2 1371 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 1372 *
Bogdan Marinescu 0:a792d4bf36c2 1373 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 1374 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 1375 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 1376 */
Bogdan Marinescu 0:a792d4bf36c2 1377 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 1378 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1379 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 1380 }
Bogdan Marinescu 0:a792d4bf36c2 1381 }
Bogdan Marinescu 0:a792d4bf36c2 1382
Bogdan Marinescu 0:a792d4bf36c2 1383 private:
Bogdan Marinescu 0:a792d4bf36c2 1384 struct event {
Bogdan Marinescu 0:a792d4bf36c2 1385 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 1386 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 1387 int id;
Bogdan Marinescu 0:a792d4bf36c2 1388
Bogdan Marinescu 0:a792d4bf36c2 1389 int delay;
Bogdan Marinescu 0:a792d4bf36c2 1390 int period;
Bogdan Marinescu 0:a792d4bf36c2 1391
Bogdan Marinescu 0:a792d4bf36c2 1392 int (*post)(struct event *, A0 a0, A1 a1, A2 a2);
Bogdan Marinescu 0:a792d4bf36c2 1393 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 1394
Bogdan Marinescu 0:a792d4bf36c2 1395 // F follows
Bogdan Marinescu 0:a792d4bf36c2 1396 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 1397
Christopher Haster 4:f157c7bf01cc 1398 // Event attributes
Christopher Haster 4:f157c7bf01cc 1399 template <typename F>
Christopher Haster 4:f157c7bf01cc 1400 static int event_post(struct event *e, A0 a0, A1 a1, A2 a2) {
Christopher Haster 4:f157c7bf01cc 1401 typedef EventQueue::context30<F, A0, A1, A2> C;
Christopher Haster 4:f157c7bf01cc 1402 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 1403 if (!p) {
Christopher Haster 4:f157c7bf01cc 1404 return 0;
Christopher Haster 4:f157c7bf01cc 1405 }
Christopher Haster 4:f157c7bf01cc 1406
Christopher Haster 4:f157c7bf01cc 1407 new (p) C(*(F*)(e + 1), a0, a1, a2);
Christopher Haster 4:f157c7bf01cc 1408 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 1409 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 1410 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 1411 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 1412 }
Christopher Haster 4:f157c7bf01cc 1413
Christopher Haster 4:f157c7bf01cc 1414 template <typename F>
Christopher Haster 4:f157c7bf01cc 1415 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 1416 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 1417 }
Christopher Haster 4:f157c7bf01cc 1418
Bogdan Marinescu 0:a792d4bf36c2 1419 public:
Bogdan Marinescu 0:a792d4bf36c2 1420 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1421 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1422 */
Bogdan Marinescu 0:a792d4bf36c2 1423 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 1424 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 1425 new (this) Event(q, EventQueue::context13<F, C0, A0, A1, A2>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 1426 }
Bogdan Marinescu 0:a792d4bf36c2 1427
Bogdan Marinescu 0:a792d4bf36c2 1428 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1429 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1430 */
Bogdan Marinescu 0:a792d4bf36c2 1431 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 1432 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 1433 new (this) Event(q, EventQueue::context23<F, C0, C1, A0, A1, A2>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 1434 }
Bogdan Marinescu 0:a792d4bf36c2 1435
Bogdan Marinescu 0:a792d4bf36c2 1436 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1437 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1438 */
Bogdan Marinescu 0:a792d4bf36c2 1439 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 1440 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 1441 new (this) Event(q, EventQueue::context33<F, C0, C1, C2, A0, A1, A2>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 1442 }
Bogdan Marinescu 0:a792d4bf36c2 1443
Bogdan Marinescu 0:a792d4bf36c2 1444 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1445 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1446 */
Bogdan Marinescu 0:a792d4bf36c2 1447 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 1448 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 1449 new (this) Event(q, EventQueue::context43<F, C0, C1, C2, C3, A0, A1, A2>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 1450 }
Bogdan Marinescu 0:a792d4bf36c2 1451
Bogdan Marinescu 0:a792d4bf36c2 1452 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1453 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1454 */
Bogdan Marinescu 0:a792d4bf36c2 1455 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 1456 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 1457 new (this) Event(q, EventQueue::context53<F, C0, C1, C2, C3, C4, A0, A1, A2>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 1458 }
Bogdan Marinescu 0:a792d4bf36c2 1459
Bogdan Marinescu 0:a792d4bf36c2 1460 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1461 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1462 */
Bogdan Marinescu 0:a792d4bf36c2 1463 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1464 Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1465 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1466 }
Bogdan Marinescu 0:a792d4bf36c2 1467
Bogdan Marinescu 0:a792d4bf36c2 1468 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1469 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1470 */
Bogdan Marinescu 0:a792d4bf36c2 1471 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1472 Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1473 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1474 }
Bogdan Marinescu 0:a792d4bf36c2 1475
Bogdan Marinescu 0:a792d4bf36c2 1476 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1477 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1478 */
Bogdan Marinescu 0:a792d4bf36c2 1479 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1480 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1481 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1482 }
Bogdan Marinescu 0:a792d4bf36c2 1483
Bogdan Marinescu 0:a792d4bf36c2 1484 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1485 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1486 */
Bogdan Marinescu 0:a792d4bf36c2 1487 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1488 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1489 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1490 }
Bogdan Marinescu 0:a792d4bf36c2 1491
Bogdan Marinescu 0:a792d4bf36c2 1492 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1493 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1494 */
Bogdan Marinescu 0:a792d4bf36c2 1495 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1496 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1497 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1498 }
Bogdan Marinescu 0:a792d4bf36c2 1499
Bogdan Marinescu 0:a792d4bf36c2 1500 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1501 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1502 */
Bogdan Marinescu 0:a792d4bf36c2 1503 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1504 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1505 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1506 }
Bogdan Marinescu 0:a792d4bf36c2 1507
Bogdan Marinescu 0:a792d4bf36c2 1508 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1509 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1510 */
Bogdan Marinescu 0:a792d4bf36c2 1511 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1512 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1513 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1514 }
Bogdan Marinescu 0:a792d4bf36c2 1515
Bogdan Marinescu 0:a792d4bf36c2 1516 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1517 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1518 */
Bogdan Marinescu 0:a792d4bf36c2 1519 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1520 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1521 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1522 }
Bogdan Marinescu 0:a792d4bf36c2 1523
Bogdan Marinescu 0:a792d4bf36c2 1524 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1525 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1526 */
Bogdan Marinescu 0:a792d4bf36c2 1527 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1528 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1529 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1530 }
Bogdan Marinescu 0:a792d4bf36c2 1531
Bogdan Marinescu 0:a792d4bf36c2 1532 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1533 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1534 */
Bogdan Marinescu 0:a792d4bf36c2 1535 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1536 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1537 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1538 }
Bogdan Marinescu 0:a792d4bf36c2 1539
Bogdan Marinescu 0:a792d4bf36c2 1540 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1541 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1542 */
Bogdan Marinescu 0:a792d4bf36c2 1543 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1544 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1545 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1546 }
Bogdan Marinescu 0:a792d4bf36c2 1547
Bogdan Marinescu 0:a792d4bf36c2 1548 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1549 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1550 */
Bogdan Marinescu 0:a792d4bf36c2 1551 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1552 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1553 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1554 }
Bogdan Marinescu 0:a792d4bf36c2 1555
Bogdan Marinescu 0:a792d4bf36c2 1556 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1557 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1558 */
Bogdan Marinescu 0:a792d4bf36c2 1559 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1560 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1561 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1562 }
Bogdan Marinescu 0:a792d4bf36c2 1563
Bogdan Marinescu 0:a792d4bf36c2 1564 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1565 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1566 */
Bogdan Marinescu 0:a792d4bf36c2 1567 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1568 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1569 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1570 }
Bogdan Marinescu 0:a792d4bf36c2 1571
Bogdan Marinescu 0:a792d4bf36c2 1572 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1573 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1574 */
Bogdan Marinescu 0:a792d4bf36c2 1575 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1576 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1577 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1578 }
Bogdan Marinescu 0:a792d4bf36c2 1579
Bogdan Marinescu 0:a792d4bf36c2 1580 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1581 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1582 */
Bogdan Marinescu 0:a792d4bf36c2 1583 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1584 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1585 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1586 }
Bogdan Marinescu 0:a792d4bf36c2 1587
Bogdan Marinescu 0:a792d4bf36c2 1588 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1589 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1590 */
Bogdan Marinescu 0:a792d4bf36c2 1591 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1592 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1593 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1594 }
Bogdan Marinescu 0:a792d4bf36c2 1595
Bogdan Marinescu 0:a792d4bf36c2 1596 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1597 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1598 */
Bogdan Marinescu 0:a792d4bf36c2 1599 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1600 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1601 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1602 }
Bogdan Marinescu 0:a792d4bf36c2 1603
Bogdan Marinescu 0:a792d4bf36c2 1604 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1605 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1606 */
Bogdan Marinescu 0:a792d4bf36c2 1607 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1608 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1609 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1610 }
Bogdan Marinescu 0:a792d4bf36c2 1611
Bogdan Marinescu 0:a792d4bf36c2 1612 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1613 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1614 */
Bogdan Marinescu 0:a792d4bf36c2 1615 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1616 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1617 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1618 }
Bogdan Marinescu 0:a792d4bf36c2 1619 };
Bogdan Marinescu 0:a792d4bf36c2 1620
Bogdan Marinescu 0:a792d4bf36c2 1621 /** Event
Bogdan Marinescu 0:a792d4bf36c2 1622 *
Bogdan Marinescu 0:a792d4bf36c2 1623 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 1624 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 1625 */
Bogdan Marinescu 0:a792d4bf36c2 1626 template <typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 1627 class Event<void(A0, A1, A2, A3)> {
Bogdan Marinescu 0:a792d4bf36c2 1628 public:
Bogdan Marinescu 0:a792d4bf36c2 1629 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1630 *
Bogdan Marinescu 0:a792d4bf36c2 1631 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 1632 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 1633 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 1634 *
Bogdan Marinescu 0:a792d4bf36c2 1635 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 1636 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 1637 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 1638 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 1639 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 1640 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 1641 */
Bogdan Marinescu 0:a792d4bf36c2 1642 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 1643 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 1644 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 1645 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 1646
Bogdan Marinescu 0:a792d4bf36c2 1647 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1648 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 1649 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 1650 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 1651 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 1652
Christopher Haster 4:f157c7bf01cc 1653 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 1654 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 1655
Bogdan Marinescu 0:a792d4bf36c2 1656 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 1657
Bogdan Marinescu 0:a792d4bf36c2 1658 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 1659 }
Bogdan Marinescu 0:a792d4bf36c2 1660 }
Bogdan Marinescu 0:a792d4bf36c2 1661
Bogdan Marinescu 0:a792d4bf36c2 1662 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 1663 */
Bogdan Marinescu 0:a792d4bf36c2 1664 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 1665 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 1666 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 1667 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 1668 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 1669 }
Bogdan Marinescu 0:a792d4bf36c2 1670 }
Bogdan Marinescu 0:a792d4bf36c2 1671
Bogdan Marinescu 0:a792d4bf36c2 1672 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 1673 */
Bogdan Marinescu 0:a792d4bf36c2 1674 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 1675 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 1676 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 1677 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 1678 }
Bogdan Marinescu 0:a792d4bf36c2 1679
Bogdan Marinescu 0:a792d4bf36c2 1680 return *this;
Bogdan Marinescu 0:a792d4bf36c2 1681 }
Bogdan Marinescu 0:a792d4bf36c2 1682
Bogdan Marinescu 0:a792d4bf36c2 1683 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 1684 */
Bogdan Marinescu 0:a792d4bf36c2 1685 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 1686 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1687 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 1688 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 1689 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 1690 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 1691 }
Bogdan Marinescu 0:a792d4bf36c2 1692 }
Bogdan Marinescu 0:a792d4bf36c2 1693 }
Bogdan Marinescu 0:a792d4bf36c2 1694
Bogdan Marinescu 0:a792d4bf36c2 1695 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 1696 *
Bogdan Marinescu 0:a792d4bf36c2 1697 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 1698 */
Bogdan Marinescu 0:a792d4bf36c2 1699 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 1700 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1701 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 1702 }
Bogdan Marinescu 0:a792d4bf36c2 1703 }
Bogdan Marinescu 0:a792d4bf36c2 1704
Bogdan Marinescu 0:a792d4bf36c2 1705 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 1706 *
Bogdan Marinescu 0:a792d4bf36c2 1707 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 1708 */
Bogdan Marinescu 0:a792d4bf36c2 1709 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 1710 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1711 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 1712 }
Bogdan Marinescu 0:a792d4bf36c2 1713 }
Bogdan Marinescu 0:a792d4bf36c2 1714
Bogdan Marinescu 0:a792d4bf36c2 1715 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 1716 *
Bogdan Marinescu 0:a792d4bf36c2 1717 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 1718 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 1719 *
Bogdan Marinescu 0:a792d4bf36c2 1720 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 1721 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 1722 *
Bogdan Marinescu 0:a792d4bf36c2 1723 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1724 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 1725 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 1726 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 1727 */
Bogdan Marinescu 0:a792d4bf36c2 1728 int post(A0 a0, A1 a1, A2 a2, A3 a3) const {
Bogdan Marinescu 0:a792d4bf36c2 1729 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 1730 return 0;
Bogdan Marinescu 0:a792d4bf36c2 1731 }
Bogdan Marinescu 0:a792d4bf36c2 1732
Bogdan Marinescu 0:a792d4bf36c2 1733 _event->id = _event->post(_event, a0, a1, a2, a3);
Bogdan Marinescu 0:a792d4bf36c2 1734 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 1735 }
Bogdan Marinescu 0:a792d4bf36c2 1736
Bogdan Marinescu 0:a792d4bf36c2 1737 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 1738 *
Bogdan Marinescu 0:a792d4bf36c2 1739 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1740 */
Bogdan Marinescu 0:a792d4bf36c2 1741 void call(A0 a0, A1 a1, A2 a2, A3 a3) const {
Christopher Haster 8:773de146a61c 1742 MBED_UNUSED int id = post(a0, a1, a2, a3);
Bogdan Marinescu 0:a792d4bf36c2 1743 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 1744 }
Bogdan Marinescu 0:a792d4bf36c2 1745
Bogdan Marinescu 0:a792d4bf36c2 1746 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 1747 *
Bogdan Marinescu 0:a792d4bf36c2 1748 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1749 */
Bogdan Marinescu 0:a792d4bf36c2 1750 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) const {
Bogdan Marinescu 0:a792d4bf36c2 1751 return call(a0, a1, a2, a3);
Bogdan Marinescu 0:a792d4bf36c2 1752 }
Bogdan Marinescu 0:a792d4bf36c2 1753
Bogdan Marinescu 0:a792d4bf36c2 1754 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 1755 *
Bogdan Marinescu 0:a792d4bf36c2 1756 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 1757 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 1758 */
Bogdan Marinescu 0:a792d4bf36c2 1759 static void thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3) {
Bogdan Marinescu 0:a792d4bf36c2 1760 return static_cast<Event*>(func)->call(a0, a1, a2, a3);
Bogdan Marinescu 0:a792d4bf36c2 1761 }
Bogdan Marinescu 0:a792d4bf36c2 1762
Bogdan Marinescu 0:a792d4bf36c2 1763 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 1764 *
Bogdan Marinescu 0:a792d4bf36c2 1765 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 1766 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 1767 *
Bogdan Marinescu 0:a792d4bf36c2 1768 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 1769 *
Bogdan Marinescu 0:a792d4bf36c2 1770 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 1771 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 1772 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 1773 */
Bogdan Marinescu 0:a792d4bf36c2 1774 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 1775 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 1776 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 1777 }
Bogdan Marinescu 0:a792d4bf36c2 1778 }
Bogdan Marinescu 0:a792d4bf36c2 1779
Bogdan Marinescu 0:a792d4bf36c2 1780 private:
Bogdan Marinescu 0:a792d4bf36c2 1781 struct event {
Bogdan Marinescu 0:a792d4bf36c2 1782 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 1783 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 1784 int id;
Bogdan Marinescu 0:a792d4bf36c2 1785
Bogdan Marinescu 0:a792d4bf36c2 1786 int delay;
Bogdan Marinescu 0:a792d4bf36c2 1787 int period;
Bogdan Marinescu 0:a792d4bf36c2 1788
Bogdan Marinescu 0:a792d4bf36c2 1789 int (*post)(struct event *, A0 a0, A1 a1, A2 a2, A3 a3);
Bogdan Marinescu 0:a792d4bf36c2 1790 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 1791
Bogdan Marinescu 0:a792d4bf36c2 1792 // F follows
Bogdan Marinescu 0:a792d4bf36c2 1793 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 1794
Christopher Haster 4:f157c7bf01cc 1795 // Event attributes
Christopher Haster 4:f157c7bf01cc 1796 template <typename F>
Christopher Haster 4:f157c7bf01cc 1797 static int event_post(struct event *e, A0 a0, A1 a1, A2 a2, A3 a3) {
Christopher Haster 4:f157c7bf01cc 1798 typedef EventQueue::context40<F, A0, A1, A2, A3> C;
Christopher Haster 4:f157c7bf01cc 1799 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 1800 if (!p) {
Christopher Haster 4:f157c7bf01cc 1801 return 0;
Christopher Haster 4:f157c7bf01cc 1802 }
Christopher Haster 4:f157c7bf01cc 1803
Christopher Haster 4:f157c7bf01cc 1804 new (p) C(*(F*)(e + 1), a0, a1, a2, a3);
Christopher Haster 4:f157c7bf01cc 1805 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 1806 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 1807 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 1808 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 1809 }
Christopher Haster 4:f157c7bf01cc 1810
Christopher Haster 4:f157c7bf01cc 1811 template <typename F>
Christopher Haster 4:f157c7bf01cc 1812 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 1813 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 1814 }
Christopher Haster 4:f157c7bf01cc 1815
Bogdan Marinescu 0:a792d4bf36c2 1816 public:
Bogdan Marinescu 0:a792d4bf36c2 1817 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1818 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1819 */
Bogdan Marinescu 0:a792d4bf36c2 1820 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 1821 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 1822 new (this) Event(q, EventQueue::context14<F, C0, A0, A1, A2, A3>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 1823 }
Bogdan Marinescu 0:a792d4bf36c2 1824
Bogdan Marinescu 0:a792d4bf36c2 1825 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1826 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1827 */
Bogdan Marinescu 0:a792d4bf36c2 1828 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 1829 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 1830 new (this) Event(q, EventQueue::context24<F, C0, C1, A0, A1, A2, A3>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 1831 }
Bogdan Marinescu 0:a792d4bf36c2 1832
Bogdan Marinescu 0:a792d4bf36c2 1833 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1834 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1835 */
Bogdan Marinescu 0:a792d4bf36c2 1836 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 1837 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 1838 new (this) Event(q, EventQueue::context34<F, C0, C1, C2, A0, A1, A2, A3>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 1839 }
Bogdan Marinescu 0:a792d4bf36c2 1840
Bogdan Marinescu 0:a792d4bf36c2 1841 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1842 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1843 */
Bogdan Marinescu 0:a792d4bf36c2 1844 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 1845 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 1846 new (this) Event(q, EventQueue::context44<F, C0, C1, C2, C3, A0, A1, A2, A3>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 1847 }
Bogdan Marinescu 0:a792d4bf36c2 1848
Bogdan Marinescu 0:a792d4bf36c2 1849 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1850 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1851 */
Bogdan Marinescu 0:a792d4bf36c2 1852 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 1853 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 1854 new (this) Event(q, EventQueue::context54<F, C0, C1, C2, C3, C4, A0, A1, A2, A3>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 1855 }
Bogdan Marinescu 0:a792d4bf36c2 1856
Bogdan Marinescu 0:a792d4bf36c2 1857 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1858 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1859 */
Bogdan Marinescu 0:a792d4bf36c2 1860 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1861 Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2, A3), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1862 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1863 }
Bogdan Marinescu 0:a792d4bf36c2 1864
Bogdan Marinescu 0:a792d4bf36c2 1865 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1866 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1867 */
Bogdan Marinescu 0:a792d4bf36c2 1868 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1869 Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2, A3) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1870 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1871 }
Bogdan Marinescu 0:a792d4bf36c2 1872
Bogdan Marinescu 0:a792d4bf36c2 1873 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1874 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1875 */
Bogdan Marinescu 0:a792d4bf36c2 1876 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1877 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1878 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1879 }
Bogdan Marinescu 0:a792d4bf36c2 1880
Bogdan Marinescu 0:a792d4bf36c2 1881 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1882 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1883 */
Bogdan Marinescu 0:a792d4bf36c2 1884 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 1885 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 1886 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 1887 }
Bogdan Marinescu 0:a792d4bf36c2 1888
Bogdan Marinescu 0:a792d4bf36c2 1889 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1890 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1891 */
Bogdan Marinescu 0:a792d4bf36c2 1892 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1893 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1894 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1895 }
Bogdan Marinescu 0:a792d4bf36c2 1896
Bogdan Marinescu 0:a792d4bf36c2 1897 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1898 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1899 */
Bogdan Marinescu 0:a792d4bf36c2 1900 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1901 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1902 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1903 }
Bogdan Marinescu 0:a792d4bf36c2 1904
Bogdan Marinescu 0:a792d4bf36c2 1905 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1906 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1907 */
Bogdan Marinescu 0:a792d4bf36c2 1908 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1909 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1910 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1911 }
Bogdan Marinescu 0:a792d4bf36c2 1912
Bogdan Marinescu 0:a792d4bf36c2 1913 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1914 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1915 */
Bogdan Marinescu 0:a792d4bf36c2 1916 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 1917 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 1918 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 1919 }
Bogdan Marinescu 0:a792d4bf36c2 1920
Bogdan Marinescu 0:a792d4bf36c2 1921 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1922 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1923 */
Bogdan Marinescu 0:a792d4bf36c2 1924 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1925 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1926 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1927 }
Bogdan Marinescu 0:a792d4bf36c2 1928
Bogdan Marinescu 0:a792d4bf36c2 1929 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1930 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1931 */
Bogdan Marinescu 0:a792d4bf36c2 1932 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1933 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1934 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1935 }
Bogdan Marinescu 0:a792d4bf36c2 1936
Bogdan Marinescu 0:a792d4bf36c2 1937 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1938 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1939 */
Bogdan Marinescu 0:a792d4bf36c2 1940 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1941 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1942 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1943 }
Bogdan Marinescu 0:a792d4bf36c2 1944
Bogdan Marinescu 0:a792d4bf36c2 1945 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1946 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1947 */
Bogdan Marinescu 0:a792d4bf36c2 1948 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 1949 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 1950 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 1951 }
Bogdan Marinescu 0:a792d4bf36c2 1952
Bogdan Marinescu 0:a792d4bf36c2 1953 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1954 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1955 */
Bogdan Marinescu 0:a792d4bf36c2 1956 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1957 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1958 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1959 }
Bogdan Marinescu 0:a792d4bf36c2 1960
Bogdan Marinescu 0:a792d4bf36c2 1961 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1962 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1963 */
Bogdan Marinescu 0:a792d4bf36c2 1964 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1965 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1966 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1967 }
Bogdan Marinescu 0:a792d4bf36c2 1968
Bogdan Marinescu 0:a792d4bf36c2 1969 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1970 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1971 */
Bogdan Marinescu 0:a792d4bf36c2 1972 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1973 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1974 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1975 }
Bogdan Marinescu 0:a792d4bf36c2 1976
Bogdan Marinescu 0:a792d4bf36c2 1977 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1978 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1979 */
Bogdan Marinescu 0:a792d4bf36c2 1980 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 1981 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 1982 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 1983 }
Bogdan Marinescu 0:a792d4bf36c2 1984
Bogdan Marinescu 0:a792d4bf36c2 1985 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1986 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1987 */
Bogdan Marinescu 0:a792d4bf36c2 1988 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1989 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1990 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1991 }
Bogdan Marinescu 0:a792d4bf36c2 1992
Bogdan Marinescu 0:a792d4bf36c2 1993 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 1994 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 1995 */
Bogdan Marinescu 0:a792d4bf36c2 1996 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 1997 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 1998 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 1999 }
Bogdan Marinescu 0:a792d4bf36c2 2000
Bogdan Marinescu 0:a792d4bf36c2 2001 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2002 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2003 */
Bogdan Marinescu 0:a792d4bf36c2 2004 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2005 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2006 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2007 }
Bogdan Marinescu 0:a792d4bf36c2 2008
Bogdan Marinescu 0:a792d4bf36c2 2009 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2010 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2011 */
Bogdan Marinescu 0:a792d4bf36c2 2012 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2013 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2014 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2015 }
Bogdan Marinescu 0:a792d4bf36c2 2016 };
Bogdan Marinescu 0:a792d4bf36c2 2017
Bogdan Marinescu 0:a792d4bf36c2 2018 /** Event
Bogdan Marinescu 0:a792d4bf36c2 2019 *
Bogdan Marinescu 0:a792d4bf36c2 2020 * Representation of an event for fine-grain dispatch control
Jimmy Brisson 9822:fb4e93c12c32 2021 * @ingroup events
Bogdan Marinescu 0:a792d4bf36c2 2022 */
Bogdan Marinescu 0:a792d4bf36c2 2023 template <typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 2024 class Event<void(A0, A1, A2, A3, A4)> {
Bogdan Marinescu 0:a792d4bf36c2 2025 public:
Bogdan Marinescu 0:a792d4bf36c2 2026 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2027 *
Bogdan Marinescu 0:a792d4bf36c2 2028 * Constructs an event bound to the specified event queue. The specified
Bogdan Marinescu 0:a792d4bf36c2 2029 * callback acts as the target for the event and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 2030 * context of the event queue's dispatch loop once posted.
Bogdan Marinescu 0:a792d4bf36c2 2031 *
Bogdan Marinescu 0:a792d4bf36c2 2032 * @param q Event queue to dispatch on
Bogdan Marinescu 0:a792d4bf36c2 2033 * @param f Function to execute when the event is dispatched
Christopher Haster 15:42ba4ffdf78d 2034 * @param c0..c4 Arguments to bind to the callback, these arguments are
Christopher Haster 15:42ba4ffdf78d 2035 * allocated on an irq-safe allocator from the event queue's
Christopher Haster 15:42ba4ffdf78d 2036 * memory pool. Must be type-compatible with b0..b4, the
Christopher Haster 15:42ba4ffdf78d 2037 * arguments to the underlying callback.
Bogdan Marinescu 0:a792d4bf36c2 2038 */
Bogdan Marinescu 0:a792d4bf36c2 2039 template <typename F>
Bogdan Marinescu 0:a792d4bf36c2 2040 Event(EventQueue *q, F f) {
Bogdan Marinescu 0:a792d4bf36c2 2041 _event = static_cast<struct event *>(
Bogdan Marinescu 0:a792d4bf36c2 2042 equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F)));
Christopher Haster 4:f157c7bf01cc 2043
Bogdan Marinescu 0:a792d4bf36c2 2044 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 2045 _event->equeue = &q->_equeue;
Bogdan Marinescu 0:a792d4bf36c2 2046 _event->id = 0;
Bogdan Marinescu 0:a792d4bf36c2 2047 _event->delay = 0;
Bogdan Marinescu 0:a792d4bf36c2 2048 _event->period = -1;
Bogdan Marinescu 0:a792d4bf36c2 2049
Christopher Haster 4:f157c7bf01cc 2050 _event->post = &Event::event_post<F>;
Christopher Haster 4:f157c7bf01cc 2051 _event->dtor = &Event::event_dtor<F>;
Bogdan Marinescu 0:a792d4bf36c2 2052
Bogdan Marinescu 0:a792d4bf36c2 2053 new (_event+1) F(f);
Bogdan Marinescu 0:a792d4bf36c2 2054
Bogdan Marinescu 0:a792d4bf36c2 2055 _event->ref = 1;
Bogdan Marinescu 0:a792d4bf36c2 2056 }
Bogdan Marinescu 0:a792d4bf36c2 2057 }
Bogdan Marinescu 0:a792d4bf36c2 2058
Bogdan Marinescu 0:a792d4bf36c2 2059 /** Copy constructor for events
Bogdan Marinescu 0:a792d4bf36c2 2060 */
Bogdan Marinescu 0:a792d4bf36c2 2061 Event(const Event &e) {
Bogdan Marinescu 0:a792d4bf36c2 2062 _event = 0;
Bogdan Marinescu 0:a792d4bf36c2 2063 if (e._event) {
Bogdan Marinescu 0:a792d4bf36c2 2064 _event = e._event;
Bogdan Marinescu 0:a792d4bf36c2 2065 _event->ref += 1;
Bogdan Marinescu 0:a792d4bf36c2 2066 }
Bogdan Marinescu 0:a792d4bf36c2 2067 }
Bogdan Marinescu 0:a792d4bf36c2 2068
Bogdan Marinescu 0:a792d4bf36c2 2069 /** Assignment operator for events
Bogdan Marinescu 0:a792d4bf36c2 2070 */
Bogdan Marinescu 0:a792d4bf36c2 2071 Event &operator=(const Event &that) {
Bogdan Marinescu 0:a792d4bf36c2 2072 if (this != &that) {
Bogdan Marinescu 0:a792d4bf36c2 2073 this->~Event();
Bogdan Marinescu 0:a792d4bf36c2 2074 new (this) Event(that);
Bogdan Marinescu 0:a792d4bf36c2 2075 }
Bogdan Marinescu 0:a792d4bf36c2 2076
Bogdan Marinescu 0:a792d4bf36c2 2077 return *this;
Bogdan Marinescu 0:a792d4bf36c2 2078 }
Bogdan Marinescu 0:a792d4bf36c2 2079
Bogdan Marinescu 0:a792d4bf36c2 2080 /** Destructor for events
Bogdan Marinescu 0:a792d4bf36c2 2081 */
Bogdan Marinescu 0:a792d4bf36c2 2082 ~Event() {
Bogdan Marinescu 0:a792d4bf36c2 2083 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 2084 _event->ref -= 1;
Bogdan Marinescu 0:a792d4bf36c2 2085 if (_event->ref == 0) {
Bogdan Marinescu 0:a792d4bf36c2 2086 _event->dtor(_event);
Bogdan Marinescu 0:a792d4bf36c2 2087 equeue_dealloc(_event->equeue, _event);
Bogdan Marinescu 0:a792d4bf36c2 2088 }
Bogdan Marinescu 0:a792d4bf36c2 2089 }
Bogdan Marinescu 0:a792d4bf36c2 2090 }
Bogdan Marinescu 0:a792d4bf36c2 2091
Bogdan Marinescu 0:a792d4bf36c2 2092 /** Configure the delay of an event
Bogdan Marinescu 0:a792d4bf36c2 2093 *
Bogdan Marinescu 0:a792d4bf36c2 2094 * @param delay Millisecond delay before dispatching the event
Bogdan Marinescu 0:a792d4bf36c2 2095 */
Bogdan Marinescu 0:a792d4bf36c2 2096 void delay(int delay) {
Bogdan Marinescu 0:a792d4bf36c2 2097 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 2098 _event->delay = delay;
Bogdan Marinescu 0:a792d4bf36c2 2099 }
Bogdan Marinescu 0:a792d4bf36c2 2100 }
Bogdan Marinescu 0:a792d4bf36c2 2101
Bogdan Marinescu 0:a792d4bf36c2 2102 /** Configure the period of an event
Bogdan Marinescu 0:a792d4bf36c2 2103 *
Bogdan Marinescu 0:a792d4bf36c2 2104 * @param period Millisecond period for repeatedly dispatching an event
Bogdan Marinescu 0:a792d4bf36c2 2105 */
Bogdan Marinescu 0:a792d4bf36c2 2106 void period(int period) {
Bogdan Marinescu 0:a792d4bf36c2 2107 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 2108 _event->period = period;
Bogdan Marinescu 0:a792d4bf36c2 2109 }
Bogdan Marinescu 0:a792d4bf36c2 2110 }
Bogdan Marinescu 0:a792d4bf36c2 2111
Bogdan Marinescu 0:a792d4bf36c2 2112 /** Posts an event onto the underlying event queue
Bogdan Marinescu 0:a792d4bf36c2 2113 *
Bogdan Marinescu 0:a792d4bf36c2 2114 * The event is posted to the underlying queue and is executed in the
Bogdan Marinescu 0:a792d4bf36c2 2115 * context of the event queue's dispatch loop.
Bogdan Marinescu 0:a792d4bf36c2 2116 *
Bogdan Marinescu 0:a792d4bf36c2 2117 * The post function is irq safe and can act as a mechanism for moving
Bogdan Marinescu 0:a792d4bf36c2 2118 * events out of irq contexts.
Bogdan Marinescu 0:a792d4bf36c2 2119 *
Bogdan Marinescu 0:a792d4bf36c2 2120 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 2121 * @return A unique id that represents the posted event and can
Bogdan Marinescu 0:a792d4bf36c2 2122 * be passed to EventQueue::cancel, or an id of 0 if
Bogdan Marinescu 0:a792d4bf36c2 2123 * there is not enough memory to allocate the event.
Bogdan Marinescu 0:a792d4bf36c2 2124 */
Bogdan Marinescu 0:a792d4bf36c2 2125 int post(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const {
Bogdan Marinescu 0:a792d4bf36c2 2126 if (!_event) {
Bogdan Marinescu 0:a792d4bf36c2 2127 return 0;
Bogdan Marinescu 0:a792d4bf36c2 2128 }
Bogdan Marinescu 0:a792d4bf36c2 2129
Bogdan Marinescu 0:a792d4bf36c2 2130 _event->id = _event->post(_event, a0, a1, a2, a3, a4);
Bogdan Marinescu 0:a792d4bf36c2 2131 return _event->id;
Bogdan Marinescu 0:a792d4bf36c2 2132 }
Bogdan Marinescu 0:a792d4bf36c2 2133
Bogdan Marinescu 0:a792d4bf36c2 2134 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 2135 *
Bogdan Marinescu 0:a792d4bf36c2 2136 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 2137 */
Bogdan Marinescu 0:a792d4bf36c2 2138 void call(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const {
Christopher Haster 8:773de146a61c 2139 MBED_UNUSED int id = post(a0, a1, a2, a3, a4);
Bogdan Marinescu 0:a792d4bf36c2 2140 MBED_ASSERT(id);
Bogdan Marinescu 0:a792d4bf36c2 2141 }
Bogdan Marinescu 0:a792d4bf36c2 2142
Bogdan Marinescu 0:a792d4bf36c2 2143 /** Posts an event onto the underlying event queue, returning void
Bogdan Marinescu 0:a792d4bf36c2 2144 *
Bogdan Marinescu 0:a792d4bf36c2 2145 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 2146 */
Bogdan Marinescu 0:a792d4bf36c2 2147 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const {
Bogdan Marinescu 0:a792d4bf36c2 2148 return call(a0, a1, a2, a3, a4);
Bogdan Marinescu 0:a792d4bf36c2 2149 }
Bogdan Marinescu 0:a792d4bf36c2 2150
Bogdan Marinescu 0:a792d4bf36c2 2151 /** Static thunk for passing as C-style function
Bogdan Marinescu 0:a792d4bf36c2 2152 *
Bogdan Marinescu 0:a792d4bf36c2 2153 * @param func Event to call passed as a void pointer
Bogdan Marinescu 0:a792d4bf36c2 2154 * @param a0..a4 Arguments to pass to the event
Bogdan Marinescu 0:a792d4bf36c2 2155 */
Bogdan Marinescu 0:a792d4bf36c2 2156 static void thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) {
Bogdan Marinescu 0:a792d4bf36c2 2157 return static_cast<Event*>(func)->call(a0, a1, a2, a3, a4);
Bogdan Marinescu 0:a792d4bf36c2 2158 }
Bogdan Marinescu 0:a792d4bf36c2 2159
Bogdan Marinescu 0:a792d4bf36c2 2160 /** Cancels the most recently posted event
Bogdan Marinescu 0:a792d4bf36c2 2161 *
Bogdan Marinescu 0:a792d4bf36c2 2162 * Attempts to cancel the most recently posted event. It is safe to call
Bogdan Marinescu 0:a792d4bf36c2 2163 * cancel after an event has already been dispatched.
Bogdan Marinescu 0:a792d4bf36c2 2164 *
Bogdan Marinescu 0:a792d4bf36c2 2165 * The cancel function is irq safe.
Bogdan Marinescu 0:a792d4bf36c2 2166 *
Bogdan Marinescu 0:a792d4bf36c2 2167 * If called while the event queue's dispatch loop is active, the cancel
Bogdan Marinescu 0:a792d4bf36c2 2168 * function does not garuntee that the event will not execute after it
Bogdan Marinescu 0:a792d4bf36c2 2169 * returns, as the event may have already begun executing.
Bogdan Marinescu 0:a792d4bf36c2 2170 */
Bogdan Marinescu 0:a792d4bf36c2 2171 void cancel() const {
Bogdan Marinescu 0:a792d4bf36c2 2172 if (_event) {
Bogdan Marinescu 0:a792d4bf36c2 2173 equeue_cancel(_event->equeue, _event->id);
Bogdan Marinescu 0:a792d4bf36c2 2174 }
Bogdan Marinescu 0:a792d4bf36c2 2175 }
Bogdan Marinescu 0:a792d4bf36c2 2176
Bogdan Marinescu 0:a792d4bf36c2 2177 private:
Bogdan Marinescu 0:a792d4bf36c2 2178 struct event {
Bogdan Marinescu 0:a792d4bf36c2 2179 unsigned ref;
Bogdan Marinescu 0:a792d4bf36c2 2180 equeue_t *equeue;
Bogdan Marinescu 0:a792d4bf36c2 2181 int id;
Bogdan Marinescu 0:a792d4bf36c2 2182
Bogdan Marinescu 0:a792d4bf36c2 2183 int delay;
Bogdan Marinescu 0:a792d4bf36c2 2184 int period;
Bogdan Marinescu 0:a792d4bf36c2 2185
Bogdan Marinescu 0:a792d4bf36c2 2186 int (*post)(struct event *, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4);
Bogdan Marinescu 0:a792d4bf36c2 2187 void (*dtor)(struct event *);
Bogdan Marinescu 0:a792d4bf36c2 2188
Bogdan Marinescu 0:a792d4bf36c2 2189 // F follows
Bogdan Marinescu 0:a792d4bf36c2 2190 } *_event;
Bogdan Marinescu 0:a792d4bf36c2 2191
Christopher Haster 4:f157c7bf01cc 2192 // Event attributes
Christopher Haster 4:f157c7bf01cc 2193 template <typename F>
Christopher Haster 4:f157c7bf01cc 2194 static int event_post(struct event *e, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) {
Christopher Haster 4:f157c7bf01cc 2195 typedef EventQueue::context50<F, A0, A1, A2, A3, A4> C;
Christopher Haster 4:f157c7bf01cc 2196 void *p = equeue_alloc(e->equeue, sizeof(C));
Christopher Haster 4:f157c7bf01cc 2197 if (!p) {
Christopher Haster 4:f157c7bf01cc 2198 return 0;
Christopher Haster 4:f157c7bf01cc 2199 }
Christopher Haster 4:f157c7bf01cc 2200
Christopher Haster 4:f157c7bf01cc 2201 new (p) C(*(F*)(e + 1), a0, a1, a2, a3, a4);
Christopher Haster 4:f157c7bf01cc 2202 equeue_event_delay(p, e->delay);
Christopher Haster 4:f157c7bf01cc 2203 equeue_event_period(p, e->period);
Christopher Haster 7:80510299c57c 2204 equeue_event_dtor(p, &EventQueue::function_dtor<C>);
Christopher Haster 7:80510299c57c 2205 return equeue_post(e->equeue, &EventQueue::function_call<C>, p);
Christopher Haster 4:f157c7bf01cc 2206 }
Christopher Haster 4:f157c7bf01cc 2207
Christopher Haster 4:f157c7bf01cc 2208 template <typename F>
Christopher Haster 4:f157c7bf01cc 2209 static void event_dtor(struct event *e) {
Christopher Haster 4:f157c7bf01cc 2210 ((F*)(e + 1))->~F();
Christopher Haster 4:f157c7bf01cc 2211 }
Christopher Haster 4:f157c7bf01cc 2212
Bogdan Marinescu 0:a792d4bf36c2 2213 public:
Bogdan Marinescu 0:a792d4bf36c2 2214 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2215 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2216 */
Bogdan Marinescu 0:a792d4bf36c2 2217 template <typename F, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2218 Event(EventQueue *q, F f, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2219 new (this) Event(q, EventQueue::context15<F, C0, A0, A1, A2, A3, A4>(f, c0));
Bogdan Marinescu 0:a792d4bf36c2 2220 }
Bogdan Marinescu 0:a792d4bf36c2 2221
Bogdan Marinescu 0:a792d4bf36c2 2222 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2223 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2224 */
Bogdan Marinescu 0:a792d4bf36c2 2225 template <typename F, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2226 Event(EventQueue *q, F f, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2227 new (this) Event(q, EventQueue::context25<F, C0, C1, A0, A1, A2, A3, A4>(f, c0, c1));
Bogdan Marinescu 0:a792d4bf36c2 2228 }
Bogdan Marinescu 0:a792d4bf36c2 2229
Bogdan Marinescu 0:a792d4bf36c2 2230 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2231 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2232 */
Bogdan Marinescu 0:a792d4bf36c2 2233 template <typename F, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2234 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2235 new (this) Event(q, EventQueue::context35<F, C0, C1, C2, A0, A1, A2, A3, A4>(f, c0, c1, c2));
Bogdan Marinescu 0:a792d4bf36c2 2236 }
Bogdan Marinescu 0:a792d4bf36c2 2237
Bogdan Marinescu 0:a792d4bf36c2 2238 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2239 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2240 */
Bogdan Marinescu 0:a792d4bf36c2 2241 template <typename F, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2242 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2243 new (this) Event(q, EventQueue::context45<F, C0, C1, C2, C3, A0, A1, A2, A3, A4>(f, c0, c1, c2, c3));
Bogdan Marinescu 0:a792d4bf36c2 2244 }
Bogdan Marinescu 0:a792d4bf36c2 2245
Bogdan Marinescu 0:a792d4bf36c2 2246 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2247 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2248 */
Bogdan Marinescu 0:a792d4bf36c2 2249 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2250 Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2251 new (this) Event(q, EventQueue::context55<F, C0, C1, C2, C3, C4, A0, A1, A2, A3, A4>(f, c0, c1, c2, c3, c4));
Bogdan Marinescu 0:a792d4bf36c2 2252 }
Bogdan Marinescu 0:a792d4bf36c2 2253
Bogdan Marinescu 0:a792d4bf36c2 2254 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2255 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2256 */
Bogdan Marinescu 0:a792d4bf36c2 2257 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 2258 Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4), B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 2259 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 2260 }
Bogdan Marinescu 0:a792d4bf36c2 2261
Bogdan Marinescu 0:a792d4bf36c2 2262 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2263 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2264 */
Bogdan Marinescu 0:a792d4bf36c2 2265 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 2266 Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 2267 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 2268 }
Bogdan Marinescu 0:a792d4bf36c2 2269
Bogdan Marinescu 0:a792d4bf36c2 2270 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2271 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2272 */
Bogdan Marinescu 0:a792d4bf36c2 2273 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 2274 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 2275 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 2276 }
Bogdan Marinescu 0:a792d4bf36c2 2277
Bogdan Marinescu 0:a792d4bf36c2 2278 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2279 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2280 */
Bogdan Marinescu 0:a792d4bf36c2 2281 template <typename T, typename R, typename B0>
Bogdan Marinescu 0:a792d4bf36c2 2282 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const volatile, B0 b0) {
Bogdan Marinescu 0:a792d4bf36c2 2283 new (this) Event(q, mbed::callback(obj, method), b0);
Bogdan Marinescu 0:a792d4bf36c2 2284 }
Bogdan Marinescu 0:a792d4bf36c2 2285
Bogdan Marinescu 0:a792d4bf36c2 2286 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2287 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2288 */
Bogdan Marinescu 0:a792d4bf36c2 2289 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 2290 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4), B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 2291 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 2292 }
Bogdan Marinescu 0:a792d4bf36c2 2293
Bogdan Marinescu 0:a792d4bf36c2 2294 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2295 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2296 */
Bogdan Marinescu 0:a792d4bf36c2 2297 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 2298 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 2299 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 2300 }
Bogdan Marinescu 0:a792d4bf36c2 2301
Bogdan Marinescu 0:a792d4bf36c2 2302 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2303 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2304 */
Bogdan Marinescu 0:a792d4bf36c2 2305 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 2306 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 2307 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 2308 }
Bogdan Marinescu 0:a792d4bf36c2 2309
Bogdan Marinescu 0:a792d4bf36c2 2310 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2311 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2312 */
Bogdan Marinescu 0:a792d4bf36c2 2313 template <typename T, typename R, typename B0, typename B1>
Bogdan Marinescu 0:a792d4bf36c2 2314 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1) {
Bogdan Marinescu 0:a792d4bf36c2 2315 new (this) Event(q, mbed::callback(obj, method), b0, b1);
Bogdan Marinescu 0:a792d4bf36c2 2316 }
Bogdan Marinescu 0:a792d4bf36c2 2317
Bogdan Marinescu 0:a792d4bf36c2 2318 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2319 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2320 */
Bogdan Marinescu 0:a792d4bf36c2 2321 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 2322 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 2323 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 2324 }
Bogdan Marinescu 0:a792d4bf36c2 2325
Bogdan Marinescu 0:a792d4bf36c2 2326 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2327 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2328 */
Bogdan Marinescu 0:a792d4bf36c2 2329 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 2330 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 2331 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 2332 }
Bogdan Marinescu 0:a792d4bf36c2 2333
Bogdan Marinescu 0:a792d4bf36c2 2334 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2335 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2336 */
Bogdan Marinescu 0:a792d4bf36c2 2337 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 2338 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 2339 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 2340 }
Bogdan Marinescu 0:a792d4bf36c2 2341
Bogdan Marinescu 0:a792d4bf36c2 2342 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2343 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2344 */
Bogdan Marinescu 0:a792d4bf36c2 2345 template <typename T, typename R, typename B0, typename B1, typename B2>
Bogdan Marinescu 0:a792d4bf36c2 2346 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2) {
Bogdan Marinescu 0:a792d4bf36c2 2347 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2);
Bogdan Marinescu 0:a792d4bf36c2 2348 }
Bogdan Marinescu 0:a792d4bf36c2 2349
Bogdan Marinescu 0:a792d4bf36c2 2350 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2351 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2352 */
Bogdan Marinescu 0:a792d4bf36c2 2353 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 2354 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 2355 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 2356 }
Bogdan Marinescu 0:a792d4bf36c2 2357
Bogdan Marinescu 0:a792d4bf36c2 2358 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2359 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2360 */
Bogdan Marinescu 0:a792d4bf36c2 2361 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 2362 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 2363 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 2364 }
Bogdan Marinescu 0:a792d4bf36c2 2365
Bogdan Marinescu 0:a792d4bf36c2 2366 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2367 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2368 */
Bogdan Marinescu 0:a792d4bf36c2 2369 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 2370 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 2371 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 2372 }
Bogdan Marinescu 0:a792d4bf36c2 2373
Bogdan Marinescu 0:a792d4bf36c2 2374 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2375 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2376 */
Bogdan Marinescu 0:a792d4bf36c2 2377 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3>
Bogdan Marinescu 0:a792d4bf36c2 2378 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) {
Bogdan Marinescu 0:a792d4bf36c2 2379 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3);
Bogdan Marinescu 0:a792d4bf36c2 2380 }
Bogdan Marinescu 0:a792d4bf36c2 2381
Bogdan Marinescu 0:a792d4bf36c2 2382 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2383 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2384 */
Bogdan Marinescu 0:a792d4bf36c2 2385 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2386 Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2387 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2388 }
Bogdan Marinescu 0:a792d4bf36c2 2389
Bogdan Marinescu 0:a792d4bf36c2 2390 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2391 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2392 */
Bogdan Marinescu 0:a792d4bf36c2 2393 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2394 Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2395 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2396 }
Bogdan Marinescu 0:a792d4bf36c2 2397
Bogdan Marinescu 0:a792d4bf36c2 2398 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2399 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2400 */
Bogdan Marinescu 0:a792d4bf36c2 2401 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2402 Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2403 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2404 }
Bogdan Marinescu 0:a792d4bf36c2 2405
Bogdan Marinescu 0:a792d4bf36c2 2406 /** Create an event
Bogdan Marinescu 0:a792d4bf36c2 2407 * @see Event::Event
Bogdan Marinescu 0:a792d4bf36c2 2408 */
Bogdan Marinescu 0:a792d4bf36c2 2409 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4>
Bogdan Marinescu 0:a792d4bf36c2 2410 Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) {
Bogdan Marinescu 0:a792d4bf36c2 2411 new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4);
Bogdan Marinescu 0:a792d4bf36c2 2412 }
Bogdan Marinescu 0:a792d4bf36c2 2413 };
Bogdan Marinescu 0:a792d4bf36c2 2414
Bogdan Marinescu 0:a792d4bf36c2 2415
Jimmy Brisson 9822:fb4e93c12c32 2416 /** \addtogroup events */
Jimmy Brisson 9822:fb4e93c12c32 2417 /** @{ */
Bogdan Marinescu 0:a792d4bf36c2 2418
Bogdan Marinescu 0:a792d4bf36c2 2419 // Convenience functions declared here to avoid cyclic
Bogdan Marinescu 0:a792d4bf36c2 2420 // dependency between Event and EventQueue
Bogdan Marinescu 0:a792d4bf36c2 2421 template <typename R>
Bogdan Marinescu 0:a792d4bf36c2 2422 Event<void()> EventQueue::event(R (*func)()) {
Bogdan Marinescu 0:a792d4bf36c2 2423 return Event<void()>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 2424 }
Bogdan Marinescu 0:a792d4bf36c2 2425
Bogdan Marinescu 0:a792d4bf36c2 2426 template <typename T, typename R>
Bogdan Marinescu 0:a792d4bf36c2 2427 Event<void()> EventQueue::event(T *obj, R (T::*method)()) {
Bogdan Marinescu 0:a792d4bf36c2 2428 return Event<void()>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2429 }
Bogdan Marinescu 0:a792d4bf36c2 2430
Bogdan Marinescu 0:a792d4bf36c2 2431 template <typename T, typename R>
Bogdan Marinescu 0:a792d4bf36c2 2432 Event<void()> EventQueue::event(const T *obj, R (T::*method)() const) {
Bogdan Marinescu 0:a792d4bf36c2 2433 return Event<void()>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2434 }
Bogdan Marinescu 0:a792d4bf36c2 2435
Bogdan Marinescu 0:a792d4bf36c2 2436 template <typename T, typename R>
Bogdan Marinescu 0:a792d4bf36c2 2437 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)() volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2438 return Event<void()>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2439 }
Bogdan Marinescu 0:a792d4bf36c2 2440
Bogdan Marinescu 0:a792d4bf36c2 2441 template <typename T, typename R>
Bogdan Marinescu 0:a792d4bf36c2 2442 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)() const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2443 return Event<void()>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2444 }
Bogdan Marinescu 0:a792d4bf36c2 2445
Christopher Haster 14:65535458dd6f 2446 template <typename R>
Christopher Haster 14:65535458dd6f 2447 Event<void()> EventQueue::event(mbed::Callback<R()> cb) {
Christopher Haster 14:65535458dd6f 2448 return Event<void()>(this, cb);
Christopher Haster 14:65535458dd6f 2449 }
Christopher Haster 14:65535458dd6f 2450
Bogdan Marinescu 0:a792d4bf36c2 2451 template <typename R, typename B0, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2452 Event<void()> EventQueue::event(R (*func)(B0), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2453 return Event<void()>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 2454 }
Bogdan Marinescu 0:a792d4bf36c2 2455
Bogdan Marinescu 0:a792d4bf36c2 2456 template <typename T, typename R, typename B0, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2457 Event<void()> EventQueue::event(T *obj, R (T::*method)(B0), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2458 return Event<void()>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2459 }
Bogdan Marinescu 0:a792d4bf36c2 2460
Bogdan Marinescu 0:a792d4bf36c2 2461 template <typename T, typename R, typename B0, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2462 Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2463 return Event<void()>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2464 }
Bogdan Marinescu 0:a792d4bf36c2 2465
Bogdan Marinescu 0:a792d4bf36c2 2466 template <typename T, typename R, typename B0, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2467 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2468 return Event<void()>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2469 }
Bogdan Marinescu 0:a792d4bf36c2 2470
Bogdan Marinescu 0:a792d4bf36c2 2471 template <typename T, typename R, typename B0, typename C0>
Bogdan Marinescu 0:a792d4bf36c2 2472 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2473 return Event<void()>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2474 }
Bogdan Marinescu 0:a792d4bf36c2 2475
Christopher Haster 14:65535458dd6f 2476 template <typename R, typename B0, typename C0>
Christopher Haster 14:65535458dd6f 2477 Event<void()> EventQueue::event(mbed::Callback<R(B0)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 2478 return Event<void()>(this, cb, c0);
Christopher Haster 14:65535458dd6f 2479 }
Christopher Haster 14:65535458dd6f 2480
Bogdan Marinescu 0:a792d4bf36c2 2481 template <typename R, typename B0, typename B1, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2482 Event<void()> EventQueue::event(R (*func)(B0, B1), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2483 return Event<void()>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2484 }
Bogdan Marinescu 0:a792d4bf36c2 2485
Bogdan Marinescu 0:a792d4bf36c2 2486 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2487 Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2488 return Event<void()>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2489 }
Bogdan Marinescu 0:a792d4bf36c2 2490
Bogdan Marinescu 0:a792d4bf36c2 2491 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2492 Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2493 return Event<void()>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2494 }
Bogdan Marinescu 0:a792d4bf36c2 2495
Bogdan Marinescu 0:a792d4bf36c2 2496 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2497 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2498 return Event<void()>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2499 }
Bogdan Marinescu 0:a792d4bf36c2 2500
Bogdan Marinescu 0:a792d4bf36c2 2501 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1>
Bogdan Marinescu 0:a792d4bf36c2 2502 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2503 return Event<void()>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2504 }
Bogdan Marinescu 0:a792d4bf36c2 2505
Christopher Haster 14:65535458dd6f 2506 template <typename R, typename B0, typename B1, typename C0, typename C1>
Christopher Haster 14:65535458dd6f 2507 Event<void()> EventQueue::event(mbed::Callback<R(B0, B1)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 2508 return Event<void()>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 2509 }
Christopher Haster 14:65535458dd6f 2510
Bogdan Marinescu 0:a792d4bf36c2 2511 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2512 Event<void()> EventQueue::event(R (*func)(B0, B1, B2), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2513 return Event<void()>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2514 }
Bogdan Marinescu 0:a792d4bf36c2 2515
Bogdan Marinescu 0:a792d4bf36c2 2516 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2517 Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2518 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2519 }
Bogdan Marinescu 0:a792d4bf36c2 2520
Bogdan Marinescu 0:a792d4bf36c2 2521 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2522 Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2523 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2524 }
Bogdan Marinescu 0:a792d4bf36c2 2525
Bogdan Marinescu 0:a792d4bf36c2 2526 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2527 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2528 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2529 }
Bogdan Marinescu 0:a792d4bf36c2 2530
Bogdan Marinescu 0:a792d4bf36c2 2531 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Bogdan Marinescu 0:a792d4bf36c2 2532 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2533 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2534 }
Bogdan Marinescu 0:a792d4bf36c2 2535
Christopher Haster 14:65535458dd6f 2536 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2>
Christopher Haster 14:65535458dd6f 2537 Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 2538 return Event<void()>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 2539 }
Christopher Haster 14:65535458dd6f 2540
Bogdan Marinescu 0:a792d4bf36c2 2541 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2542 Event<void()> EventQueue::event(R (*func)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2543 return Event<void()>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2544 }
Bogdan Marinescu 0:a792d4bf36c2 2545
Bogdan Marinescu 0:a792d4bf36c2 2546 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2547 Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2548 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2549 }
Bogdan Marinescu 0:a792d4bf36c2 2550
Bogdan Marinescu 0:a792d4bf36c2 2551 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2552 Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2553 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2554 }
Bogdan Marinescu 0:a792d4bf36c2 2555
Bogdan Marinescu 0:a792d4bf36c2 2556 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2557 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2558 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2559 }
Bogdan Marinescu 0:a792d4bf36c2 2560
Bogdan Marinescu 0:a792d4bf36c2 2561 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Bogdan Marinescu 0:a792d4bf36c2 2562 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2563 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2564 }
Bogdan Marinescu 0:a792d4bf36c2 2565
Christopher Haster 14:65535458dd6f 2566 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3>
Christopher Haster 14:65535458dd6f 2567 Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 2568 return Event<void()>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 2569 }
Christopher Haster 14:65535458dd6f 2570
Bogdan Marinescu 0:a792d4bf36c2 2571 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2572 Event<void()> EventQueue::event(R (*func)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2573 return Event<void()>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2574 }
Bogdan Marinescu 0:a792d4bf36c2 2575
Bogdan Marinescu 0:a792d4bf36c2 2576 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2577 Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2578 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2579 }
Bogdan Marinescu 0:a792d4bf36c2 2580
Bogdan Marinescu 0:a792d4bf36c2 2581 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2582 Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2583 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2584 }
Bogdan Marinescu 0:a792d4bf36c2 2585
Bogdan Marinescu 0:a792d4bf36c2 2586 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2587 Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2588 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2589 }
Bogdan Marinescu 0:a792d4bf36c2 2590
Bogdan Marinescu 0:a792d4bf36c2 2591 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Bogdan Marinescu 0:a792d4bf36c2 2592 Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2593 return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2594 }
Bogdan Marinescu 0:a792d4bf36c2 2595
Christopher Haster 14:65535458dd6f 2596 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4>
Christopher Haster 14:65535458dd6f 2597 Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 2598 return Event<void()>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 2599 }
Christopher Haster 14:65535458dd6f 2600
Bogdan Marinescu 0:a792d4bf36c2 2601 template <typename R, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2602 Event<void(A0)> EventQueue::event(R (*func)(A0)) {
Bogdan Marinescu 0:a792d4bf36c2 2603 return Event<void(A0)>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 2604 }
Bogdan Marinescu 0:a792d4bf36c2 2605
Bogdan Marinescu 0:a792d4bf36c2 2606 template <typename T, typename R, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2607 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(A0)) {
Bogdan Marinescu 0:a792d4bf36c2 2608 return Event<void(A0)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2609 }
Bogdan Marinescu 0:a792d4bf36c2 2610
Bogdan Marinescu 0:a792d4bf36c2 2611 template <typename T, typename R, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2612 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(A0) const) {
Bogdan Marinescu 0:a792d4bf36c2 2613 return Event<void(A0)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2614 }
Bogdan Marinescu 0:a792d4bf36c2 2615
Bogdan Marinescu 0:a792d4bf36c2 2616 template <typename T, typename R, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2617 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(A0) volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2618 return Event<void(A0)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2619 }
Bogdan Marinescu 0:a792d4bf36c2 2620
Bogdan Marinescu 0:a792d4bf36c2 2621 template <typename T, typename R, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2622 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(A0) const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2623 return Event<void(A0)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2624 }
Bogdan Marinescu 0:a792d4bf36c2 2625
Christopher Haster 14:65535458dd6f 2626 template <typename R, typename A0>
Christopher Haster 14:65535458dd6f 2627 Event<void(A0)> EventQueue::event(mbed::Callback<R(A0)> cb) {
Christopher Haster 14:65535458dd6f 2628 return Event<void(A0)>(this, cb);
Christopher Haster 14:65535458dd6f 2629 }
Christopher Haster 14:65535458dd6f 2630
Bogdan Marinescu 0:a792d4bf36c2 2631 template <typename R, typename B0, typename C0, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2632 Event<void(A0)> EventQueue::event(R (*func)(B0, A0), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2633 return Event<void(A0)>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 2634 }
Bogdan Marinescu 0:a792d4bf36c2 2635
Bogdan Marinescu 0:a792d4bf36c2 2636 template <typename T, typename R, typename B0, typename C0, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2637 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, A0), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2638 return Event<void(A0)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2639 }
Bogdan Marinescu 0:a792d4bf36c2 2640
Bogdan Marinescu 0:a792d4bf36c2 2641 template <typename T, typename R, typename B0, typename C0, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2642 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, A0) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2643 return Event<void(A0)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2644 }
Bogdan Marinescu 0:a792d4bf36c2 2645
Bogdan Marinescu 0:a792d4bf36c2 2646 template <typename T, typename R, typename B0, typename C0, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2647 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2648 return Event<void(A0)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2649 }
Bogdan Marinescu 0:a792d4bf36c2 2650
Bogdan Marinescu 0:a792d4bf36c2 2651 template <typename T, typename R, typename B0, typename C0, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2652 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2653 return Event<void(A0)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2654 }
Bogdan Marinescu 0:a792d4bf36c2 2655
Christopher Haster 14:65535458dd6f 2656 template <typename R, typename B0, typename C0, typename A0>
Christopher Haster 14:65535458dd6f 2657 Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, A0)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 2658 return Event<void(A0)>(this, cb, c0);
Christopher Haster 14:65535458dd6f 2659 }
Christopher Haster 14:65535458dd6f 2660
Bogdan Marinescu 0:a792d4bf36c2 2661 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2662 Event<void(A0)> EventQueue::event(R (*func)(B0, B1, A0), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2663 return Event<void(A0)>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2664 }
Bogdan Marinescu 0:a792d4bf36c2 2665
Bogdan Marinescu 0:a792d4bf36c2 2666 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2667 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2668 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2669 }
Bogdan Marinescu 0:a792d4bf36c2 2670
Bogdan Marinescu 0:a792d4bf36c2 2671 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2672 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2673 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2674 }
Bogdan Marinescu 0:a792d4bf36c2 2675
Bogdan Marinescu 0:a792d4bf36c2 2676 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2677 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2678 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2679 }
Bogdan Marinescu 0:a792d4bf36c2 2680
Bogdan Marinescu 0:a792d4bf36c2 2681 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2682 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2683 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2684 }
Bogdan Marinescu 0:a792d4bf36c2 2685
Christopher Haster 14:65535458dd6f 2686 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0>
Christopher Haster 14:65535458dd6f 2687 Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, A0)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 2688 return Event<void(A0)>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 2689 }
Christopher Haster 14:65535458dd6f 2690
Bogdan Marinescu 0:a792d4bf36c2 2691 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2692 Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2693 return Event<void(A0)>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2694 }
Bogdan Marinescu 0:a792d4bf36c2 2695
Bogdan Marinescu 0:a792d4bf36c2 2696 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2697 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2698 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2699 }
Bogdan Marinescu 0:a792d4bf36c2 2700
Bogdan Marinescu 0:a792d4bf36c2 2701 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2702 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2703 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2704 }
Bogdan Marinescu 0:a792d4bf36c2 2705
Bogdan Marinescu 0:a792d4bf36c2 2706 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2707 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2708 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2709 }
Bogdan Marinescu 0:a792d4bf36c2 2710
Bogdan Marinescu 0:a792d4bf36c2 2711 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2712 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2713 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2714 }
Bogdan Marinescu 0:a792d4bf36c2 2715
Christopher Haster 14:65535458dd6f 2716 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0>
Christopher Haster 14:65535458dd6f 2717 Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 2718 return Event<void(A0)>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 2719 }
Christopher Haster 14:65535458dd6f 2720
Bogdan Marinescu 0:a792d4bf36c2 2721 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2722 Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2723 return Event<void(A0)>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2724 }
Bogdan Marinescu 0:a792d4bf36c2 2725
Bogdan Marinescu 0:a792d4bf36c2 2726 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2727 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2728 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2729 }
Bogdan Marinescu 0:a792d4bf36c2 2730
Bogdan Marinescu 0:a792d4bf36c2 2731 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2732 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2733 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2734 }
Bogdan Marinescu 0:a792d4bf36c2 2735
Bogdan Marinescu 0:a792d4bf36c2 2736 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2737 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2738 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2739 }
Bogdan Marinescu 0:a792d4bf36c2 2740
Bogdan Marinescu 0:a792d4bf36c2 2741 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2742 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2743 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2744 }
Bogdan Marinescu 0:a792d4bf36c2 2745
Christopher Haster 14:65535458dd6f 2746 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0>
Christopher Haster 14:65535458dd6f 2747 Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 2748 return Event<void(A0)>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 2749 }
Christopher Haster 14:65535458dd6f 2750
Bogdan Marinescu 0:a792d4bf36c2 2751 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2752 Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2753 return Event<void(A0)>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2754 }
Bogdan Marinescu 0:a792d4bf36c2 2755
Bogdan Marinescu 0:a792d4bf36c2 2756 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2757 Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2758 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2759 }
Bogdan Marinescu 0:a792d4bf36c2 2760
Bogdan Marinescu 0:a792d4bf36c2 2761 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2762 Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2763 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2764 }
Bogdan Marinescu 0:a792d4bf36c2 2765
Bogdan Marinescu 0:a792d4bf36c2 2766 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2767 Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2768 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2769 }
Bogdan Marinescu 0:a792d4bf36c2 2770
Bogdan Marinescu 0:a792d4bf36c2 2771 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Bogdan Marinescu 0:a792d4bf36c2 2772 Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2773 return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2774 }
Bogdan Marinescu 0:a792d4bf36c2 2775
Christopher Haster 14:65535458dd6f 2776 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0>
Christopher Haster 14:65535458dd6f 2777 Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 2778 return Event<void(A0)>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 2779 }
Christopher Haster 14:65535458dd6f 2780
Bogdan Marinescu 0:a792d4bf36c2 2781 template <typename R, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2782 Event<void(A0, A1)> EventQueue::event(R (*func)(A0, A1)) {
Bogdan Marinescu 0:a792d4bf36c2 2783 return Event<void(A0, A1)>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 2784 }
Bogdan Marinescu 0:a792d4bf36c2 2785
Bogdan Marinescu 0:a792d4bf36c2 2786 template <typename T, typename R, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2787 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(A0, A1)) {
Bogdan Marinescu 0:a792d4bf36c2 2788 return Event<void(A0, A1)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2789 }
Bogdan Marinescu 0:a792d4bf36c2 2790
Bogdan Marinescu 0:a792d4bf36c2 2791 template <typename T, typename R, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2792 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(A0, A1) const) {
Bogdan Marinescu 0:a792d4bf36c2 2793 return Event<void(A0, A1)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2794 }
Bogdan Marinescu 0:a792d4bf36c2 2795
Bogdan Marinescu 0:a792d4bf36c2 2796 template <typename T, typename R, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2797 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1) volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2798 return Event<void(A0, A1)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2799 }
Bogdan Marinescu 0:a792d4bf36c2 2800
Bogdan Marinescu 0:a792d4bf36c2 2801 template <typename T, typename R, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2802 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1) const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2803 return Event<void(A0, A1)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2804 }
Bogdan Marinescu 0:a792d4bf36c2 2805
Christopher Haster 14:65535458dd6f 2806 template <typename R, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2807 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(A0, A1)> cb) {
Christopher Haster 14:65535458dd6f 2808 return Event<void(A0, A1)>(this, cb);
Christopher Haster 14:65535458dd6f 2809 }
Christopher Haster 14:65535458dd6f 2810
Bogdan Marinescu 0:a792d4bf36c2 2811 template <typename R, typename B0, typename C0, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2812 Event<void(A0, A1)> EventQueue::event(R (*func)(B0, A0, A1), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2813 return Event<void(A0, A1)>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 2814 }
Bogdan Marinescu 0:a792d4bf36c2 2815
Bogdan Marinescu 0:a792d4bf36c2 2816 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2817 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2818 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2819 }
Bogdan Marinescu 0:a792d4bf36c2 2820
Bogdan Marinescu 0:a792d4bf36c2 2821 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2822 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2823 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2824 }
Bogdan Marinescu 0:a792d4bf36c2 2825
Bogdan Marinescu 0:a792d4bf36c2 2826 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2827 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2828 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2829 }
Bogdan Marinescu 0:a792d4bf36c2 2830
Bogdan Marinescu 0:a792d4bf36c2 2831 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2832 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2833 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2834 }
Bogdan Marinescu 0:a792d4bf36c2 2835
Christopher Haster 14:65535458dd6f 2836 template <typename R, typename B0, typename C0, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2837 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, A0, A1)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 2838 return Event<void(A0, A1)>(this, cb, c0);
Christopher Haster 14:65535458dd6f 2839 }
Christopher Haster 14:65535458dd6f 2840
Bogdan Marinescu 0:a792d4bf36c2 2841 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2842 Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, A0, A1), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2843 return Event<void(A0, A1)>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2844 }
Bogdan Marinescu 0:a792d4bf36c2 2845
Bogdan Marinescu 0:a792d4bf36c2 2846 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2847 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2848 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2849 }
Bogdan Marinescu 0:a792d4bf36c2 2850
Bogdan Marinescu 0:a792d4bf36c2 2851 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2852 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2853 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2854 }
Bogdan Marinescu 0:a792d4bf36c2 2855
Bogdan Marinescu 0:a792d4bf36c2 2856 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2857 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2858 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2859 }
Bogdan Marinescu 0:a792d4bf36c2 2860
Bogdan Marinescu 0:a792d4bf36c2 2861 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2862 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 2863 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 2864 }
Bogdan Marinescu 0:a792d4bf36c2 2865
Christopher Haster 14:65535458dd6f 2866 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2867 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 2868 return Event<void(A0, A1)>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 2869 }
Christopher Haster 14:65535458dd6f 2870
Bogdan Marinescu 0:a792d4bf36c2 2871 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2872 Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2873 return Event<void(A0, A1)>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2874 }
Bogdan Marinescu 0:a792d4bf36c2 2875
Bogdan Marinescu 0:a792d4bf36c2 2876 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2877 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2878 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2879 }
Bogdan Marinescu 0:a792d4bf36c2 2880
Bogdan Marinescu 0:a792d4bf36c2 2881 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2882 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2883 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2884 }
Bogdan Marinescu 0:a792d4bf36c2 2885
Bogdan Marinescu 0:a792d4bf36c2 2886 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2887 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2888 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2889 }
Bogdan Marinescu 0:a792d4bf36c2 2890
Bogdan Marinescu 0:a792d4bf36c2 2891 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2892 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 2893 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 2894 }
Bogdan Marinescu 0:a792d4bf36c2 2895
Christopher Haster 14:65535458dd6f 2896 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2897 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 2898 return Event<void(A0, A1)>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 2899 }
Christopher Haster 14:65535458dd6f 2900
Bogdan Marinescu 0:a792d4bf36c2 2901 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2902 Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2903 return Event<void(A0, A1)>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2904 }
Bogdan Marinescu 0:a792d4bf36c2 2905
Bogdan Marinescu 0:a792d4bf36c2 2906 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2907 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2908 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2909 }
Bogdan Marinescu 0:a792d4bf36c2 2910
Bogdan Marinescu 0:a792d4bf36c2 2911 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2912 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2913 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2914 }
Bogdan Marinescu 0:a792d4bf36c2 2915
Bogdan Marinescu 0:a792d4bf36c2 2916 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2917 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2918 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2919 }
Bogdan Marinescu 0:a792d4bf36c2 2920
Bogdan Marinescu 0:a792d4bf36c2 2921 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2922 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 2923 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 2924 }
Bogdan Marinescu 0:a792d4bf36c2 2925
Christopher Haster 14:65535458dd6f 2926 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2927 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 2928 return Event<void(A0, A1)>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 2929 }
Christopher Haster 14:65535458dd6f 2930
Bogdan Marinescu 0:a792d4bf36c2 2931 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2932 Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2933 return Event<void(A0, A1)>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2934 }
Bogdan Marinescu 0:a792d4bf36c2 2935
Bogdan Marinescu 0:a792d4bf36c2 2936 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2937 Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2938 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2939 }
Bogdan Marinescu 0:a792d4bf36c2 2940
Bogdan Marinescu 0:a792d4bf36c2 2941 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2942 Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2943 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2944 }
Bogdan Marinescu 0:a792d4bf36c2 2945
Bogdan Marinescu 0:a792d4bf36c2 2946 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2947 Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2948 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2949 }
Bogdan Marinescu 0:a792d4bf36c2 2950
Bogdan Marinescu 0:a792d4bf36c2 2951 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Bogdan Marinescu 0:a792d4bf36c2 2952 Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 2953 return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 2954 }
Bogdan Marinescu 0:a792d4bf36c2 2955
Christopher Haster 14:65535458dd6f 2956 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1>
Christopher Haster 14:65535458dd6f 2957 Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 2958 return Event<void(A0, A1)>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 2959 }
Christopher Haster 14:65535458dd6f 2960
Bogdan Marinescu 0:a792d4bf36c2 2961 template <typename R, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2962 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(A0, A1, A2)) {
Bogdan Marinescu 0:a792d4bf36c2 2963 return Event<void(A0, A1, A2)>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 2964 }
Bogdan Marinescu 0:a792d4bf36c2 2965
Bogdan Marinescu 0:a792d4bf36c2 2966 template <typename T, typename R, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2967 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2)) {
Bogdan Marinescu 0:a792d4bf36c2 2968 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2969 }
Bogdan Marinescu 0:a792d4bf36c2 2970
Bogdan Marinescu 0:a792d4bf36c2 2971 template <typename T, typename R, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2972 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2) const) {
Bogdan Marinescu 0:a792d4bf36c2 2973 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2974 }
Bogdan Marinescu 0:a792d4bf36c2 2975
Bogdan Marinescu 0:a792d4bf36c2 2976 template <typename T, typename R, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2977 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2) volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2978 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2979 }
Bogdan Marinescu 0:a792d4bf36c2 2980
Bogdan Marinescu 0:a792d4bf36c2 2981 template <typename T, typename R, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2982 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 2983 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 2984 }
Bogdan Marinescu 0:a792d4bf36c2 2985
Christopher Haster 14:65535458dd6f 2986 template <typename R, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 2987 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(A0, A1, A2)> cb) {
Christopher Haster 14:65535458dd6f 2988 return Event<void(A0, A1, A2)>(this, cb);
Christopher Haster 14:65535458dd6f 2989 }
Christopher Haster 14:65535458dd6f 2990
Bogdan Marinescu 0:a792d4bf36c2 2991 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2992 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, A0, A1, A2), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2993 return Event<void(A0, A1, A2)>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 2994 }
Bogdan Marinescu 0:a792d4bf36c2 2995
Bogdan Marinescu 0:a792d4bf36c2 2996 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 2997 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 2998 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 2999 }
Bogdan Marinescu 0:a792d4bf36c2 3000
Bogdan Marinescu 0:a792d4bf36c2 3001 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3002 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3003 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3004 }
Bogdan Marinescu 0:a792d4bf36c2 3005
Bogdan Marinescu 0:a792d4bf36c2 3006 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3007 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3008 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3009 }
Bogdan Marinescu 0:a792d4bf36c2 3010
Bogdan Marinescu 0:a792d4bf36c2 3011 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3012 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3013 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3014 }
Bogdan Marinescu 0:a792d4bf36c2 3015
Christopher Haster 14:65535458dd6f 3016 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 3017 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 3018 return Event<void(A0, A1, A2)>(this, cb, c0);
Christopher Haster 14:65535458dd6f 3019 }
Christopher Haster 14:65535458dd6f 3020
Bogdan Marinescu 0:a792d4bf36c2 3021 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3022 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3023 return Event<void(A0, A1, A2)>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3024 }
Bogdan Marinescu 0:a792d4bf36c2 3025
Bogdan Marinescu 0:a792d4bf36c2 3026 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3027 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3028 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3029 }
Bogdan Marinescu 0:a792d4bf36c2 3030
Bogdan Marinescu 0:a792d4bf36c2 3031 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3032 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3033 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3034 }
Bogdan Marinescu 0:a792d4bf36c2 3035
Bogdan Marinescu 0:a792d4bf36c2 3036 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3037 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3038 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3039 }
Bogdan Marinescu 0:a792d4bf36c2 3040
Bogdan Marinescu 0:a792d4bf36c2 3041 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3042 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3043 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3044 }
Bogdan Marinescu 0:a792d4bf36c2 3045
Christopher Haster 14:65535458dd6f 3046 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 3047 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 3048 return Event<void(A0, A1, A2)>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 3049 }
Christopher Haster 14:65535458dd6f 3050
Bogdan Marinescu 0:a792d4bf36c2 3051 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3052 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3053 return Event<void(A0, A1, A2)>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3054 }
Bogdan Marinescu 0:a792d4bf36c2 3055
Bogdan Marinescu 0:a792d4bf36c2 3056 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3057 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3058 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3059 }
Bogdan Marinescu 0:a792d4bf36c2 3060
Bogdan Marinescu 0:a792d4bf36c2 3061 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3062 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3063 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3064 }
Bogdan Marinescu 0:a792d4bf36c2 3065
Bogdan Marinescu 0:a792d4bf36c2 3066 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3067 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3068 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3069 }
Bogdan Marinescu 0:a792d4bf36c2 3070
Bogdan Marinescu 0:a792d4bf36c2 3071 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3072 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3073 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3074 }
Bogdan Marinescu 0:a792d4bf36c2 3075
Christopher Haster 14:65535458dd6f 3076 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 3077 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 3078 return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 3079 }
Christopher Haster 14:65535458dd6f 3080
Bogdan Marinescu 0:a792d4bf36c2 3081 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3082 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3083 return Event<void(A0, A1, A2)>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3084 }
Bogdan Marinescu 0:a792d4bf36c2 3085
Bogdan Marinescu 0:a792d4bf36c2 3086 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3087 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3088 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3089 }
Bogdan Marinescu 0:a792d4bf36c2 3090
Bogdan Marinescu 0:a792d4bf36c2 3091 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3092 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3093 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3094 }
Bogdan Marinescu 0:a792d4bf36c2 3095
Bogdan Marinescu 0:a792d4bf36c2 3096 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3097 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3098 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3099 }
Bogdan Marinescu 0:a792d4bf36c2 3100
Bogdan Marinescu 0:a792d4bf36c2 3101 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3102 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3103 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3104 }
Bogdan Marinescu 0:a792d4bf36c2 3105
Christopher Haster 14:65535458dd6f 3106 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 3107 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 3108 return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 3109 }
Christopher Haster 14:65535458dd6f 3110
Bogdan Marinescu 0:a792d4bf36c2 3111 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3112 Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3113 return Event<void(A0, A1, A2)>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3114 }
Bogdan Marinescu 0:a792d4bf36c2 3115
Bogdan Marinescu 0:a792d4bf36c2 3116 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3117 Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3118 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3119 }
Bogdan Marinescu 0:a792d4bf36c2 3120
Bogdan Marinescu 0:a792d4bf36c2 3121 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3122 Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3123 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3124 }
Bogdan Marinescu 0:a792d4bf36c2 3125
Bogdan Marinescu 0:a792d4bf36c2 3126 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3127 Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3128 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3129 }
Bogdan Marinescu 0:a792d4bf36c2 3130
Bogdan Marinescu 0:a792d4bf36c2 3131 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Bogdan Marinescu 0:a792d4bf36c2 3132 Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3133 return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3134 }
Bogdan Marinescu 0:a792d4bf36c2 3135
Christopher Haster 14:65535458dd6f 3136 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2>
Christopher Haster 14:65535458dd6f 3137 Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 3138 return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 3139 }
Christopher Haster 14:65535458dd6f 3140
Bogdan Marinescu 0:a792d4bf36c2 3141 template <typename R, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3142 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(A0, A1, A2, A3)) {
Bogdan Marinescu 0:a792d4bf36c2 3143 return Event<void(A0, A1, A2, A3)>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 3144 }
Bogdan Marinescu 0:a792d4bf36c2 3145
Bogdan Marinescu 0:a792d4bf36c2 3146 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3147 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2, A3)) {
Bogdan Marinescu 0:a792d4bf36c2 3148 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3149 }
Bogdan Marinescu 0:a792d4bf36c2 3150
Bogdan Marinescu 0:a792d4bf36c2 3151 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3152 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2, A3) const) {
Bogdan Marinescu 0:a792d4bf36c2 3153 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3154 }
Bogdan Marinescu 0:a792d4bf36c2 3155
Bogdan Marinescu 0:a792d4bf36c2 3156 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3157 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile) {
Bogdan Marinescu 0:a792d4bf36c2 3158 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3159 }
Bogdan Marinescu 0:a792d4bf36c2 3160
Bogdan Marinescu 0:a792d4bf36c2 3161 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3162 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 3163 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3164 }
Bogdan Marinescu 0:a792d4bf36c2 3165
Christopher Haster 14:65535458dd6f 3166 template <typename R, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3167 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(A0, A1, A2, A3)> cb) {
Christopher Haster 14:65535458dd6f 3168 return Event<void(A0, A1, A2, A3)>(this, cb);
Christopher Haster 14:65535458dd6f 3169 }
Christopher Haster 14:65535458dd6f 3170
Bogdan Marinescu 0:a792d4bf36c2 3171 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3172 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, A0, A1, A2, A3), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3173 return Event<void(A0, A1, A2, A3)>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 3174 }
Bogdan Marinescu 0:a792d4bf36c2 3175
Bogdan Marinescu 0:a792d4bf36c2 3176 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3177 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2, A3), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3178 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3179 }
Bogdan Marinescu 0:a792d4bf36c2 3180
Bogdan Marinescu 0:a792d4bf36c2 3181 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3182 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3183 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3184 }
Bogdan Marinescu 0:a792d4bf36c2 3185
Bogdan Marinescu 0:a792d4bf36c2 3186 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3187 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3188 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3189 }
Bogdan Marinescu 0:a792d4bf36c2 3190
Bogdan Marinescu 0:a792d4bf36c2 3191 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3192 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3193 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3194 }
Bogdan Marinescu 0:a792d4bf36c2 3195
Christopher Haster 14:65535458dd6f 3196 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3197 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2, A3)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 3198 return Event<void(A0, A1, A2, A3)>(this, cb, c0);
Christopher Haster 14:65535458dd6f 3199 }
Christopher Haster 14:65535458dd6f 3200
Bogdan Marinescu 0:a792d4bf36c2 3201 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3202 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3203 return Event<void(A0, A1, A2, A3)>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3204 }
Bogdan Marinescu 0:a792d4bf36c2 3205
Bogdan Marinescu 0:a792d4bf36c2 3206 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3207 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3208 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3209 }
Bogdan Marinescu 0:a792d4bf36c2 3210
Bogdan Marinescu 0:a792d4bf36c2 3211 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3212 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3213 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3214 }
Bogdan Marinescu 0:a792d4bf36c2 3215
Bogdan Marinescu 0:a792d4bf36c2 3216 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3217 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3218 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3219 }
Bogdan Marinescu 0:a792d4bf36c2 3220
Bogdan Marinescu 0:a792d4bf36c2 3221 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3222 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3223 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3224 }
Bogdan Marinescu 0:a792d4bf36c2 3225
Christopher Haster 14:65535458dd6f 3226 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3227 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2, A3)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 3228 return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 3229 }
Christopher Haster 14:65535458dd6f 3230
Bogdan Marinescu 0:a792d4bf36c2 3231 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3232 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3233 return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3234 }
Bogdan Marinescu 0:a792d4bf36c2 3235
Bogdan Marinescu 0:a792d4bf36c2 3236 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3237 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3238 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3239 }
Bogdan Marinescu 0:a792d4bf36c2 3240
Bogdan Marinescu 0:a792d4bf36c2 3241 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3242 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3243 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3244 }
Bogdan Marinescu 0:a792d4bf36c2 3245
Bogdan Marinescu 0:a792d4bf36c2 3246 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3247 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3248 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3249 }
Bogdan Marinescu 0:a792d4bf36c2 3250
Bogdan Marinescu 0:a792d4bf36c2 3251 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3252 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3253 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3254 }
Bogdan Marinescu 0:a792d4bf36c2 3255
Christopher Haster 14:65535458dd6f 3256 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3257 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 3258 return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 3259 }
Christopher Haster 14:65535458dd6f 3260
Bogdan Marinescu 0:a792d4bf36c2 3261 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3262 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3263 return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3264 }
Bogdan Marinescu 0:a792d4bf36c2 3265
Bogdan Marinescu 0:a792d4bf36c2 3266 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3267 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3268 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3269 }
Bogdan Marinescu 0:a792d4bf36c2 3270
Bogdan Marinescu 0:a792d4bf36c2 3271 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3272 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3273 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3274 }
Bogdan Marinescu 0:a792d4bf36c2 3275
Bogdan Marinescu 0:a792d4bf36c2 3276 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3277 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3278 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3279 }
Bogdan Marinescu 0:a792d4bf36c2 3280
Bogdan Marinescu 0:a792d4bf36c2 3281 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3282 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3283 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3284 }
Bogdan Marinescu 0:a792d4bf36c2 3285
Christopher Haster 14:65535458dd6f 3286 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3287 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 3288 return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 3289 }
Christopher Haster 14:65535458dd6f 3290
Bogdan Marinescu 0:a792d4bf36c2 3291 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3292 Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3293 return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3294 }
Bogdan Marinescu 0:a792d4bf36c2 3295
Bogdan Marinescu 0:a792d4bf36c2 3296 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3297 Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3298 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3299 }
Bogdan Marinescu 0:a792d4bf36c2 3300
Bogdan Marinescu 0:a792d4bf36c2 3301 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3302 Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3303 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3304 }
Bogdan Marinescu 0:a792d4bf36c2 3305
Bogdan Marinescu 0:a792d4bf36c2 3306 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3307 Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3308 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3309 }
Bogdan Marinescu 0:a792d4bf36c2 3310
Bogdan Marinescu 0:a792d4bf36c2 3311 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Bogdan Marinescu 0:a792d4bf36c2 3312 Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3313 return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3314 }
Bogdan Marinescu 0:a792d4bf36c2 3315
Christopher Haster 14:65535458dd6f 3316 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3>
Christopher Haster 14:65535458dd6f 3317 Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 3318 return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 3319 }
Christopher Haster 14:65535458dd6f 3320
Bogdan Marinescu 0:a792d4bf36c2 3321 template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3322 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(A0, A1, A2, A3, A4)) {
Bogdan Marinescu 0:a792d4bf36c2 3323 return Event<void(A0, A1, A2, A3, A4)>(this, func);
Bogdan Marinescu 0:a792d4bf36c2 3324 }
Bogdan Marinescu 0:a792d4bf36c2 3325
Bogdan Marinescu 0:a792d4bf36c2 3326 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3327 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2, A3, A4)) {
Bogdan Marinescu 0:a792d4bf36c2 3328 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3329 }
Bogdan Marinescu 0:a792d4bf36c2 3330
Bogdan Marinescu 0:a792d4bf36c2 3331 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3332 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const) {
Bogdan Marinescu 0:a792d4bf36c2 3333 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3334 }
Bogdan Marinescu 0:a792d4bf36c2 3335
Bogdan Marinescu 0:a792d4bf36c2 3336 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3337 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile) {
Bogdan Marinescu 0:a792d4bf36c2 3338 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3339 }
Bogdan Marinescu 0:a792d4bf36c2 3340
Bogdan Marinescu 0:a792d4bf36c2 3341 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3342 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile) {
Bogdan Marinescu 0:a792d4bf36c2 3343 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method));
Bogdan Marinescu 0:a792d4bf36c2 3344 }
Bogdan Marinescu 0:a792d4bf36c2 3345
Christopher Haster 14:65535458dd6f 3346 template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3347 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(A0, A1, A2, A3, A4)> cb) {
Christopher Haster 14:65535458dd6f 3348 return Event<void(A0, A1, A2, A3, A4)>(this, cb);
Christopher Haster 14:65535458dd6f 3349 }
Christopher Haster 14:65535458dd6f 3350
Bogdan Marinescu 0:a792d4bf36c2 3351 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3352 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, A0, A1, A2, A3, A4), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3353 return Event<void(A0, A1, A2, A3, A4)>(this, func, c0);
Bogdan Marinescu 0:a792d4bf36c2 3354 }
Bogdan Marinescu 0:a792d4bf36c2 3355
Bogdan Marinescu 0:a792d4bf36c2 3356 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3357 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4), C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3358 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3359 }
Bogdan Marinescu 0:a792d4bf36c2 3360
Bogdan Marinescu 0:a792d4bf36c2 3361 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3362 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3363 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3364 }
Bogdan Marinescu 0:a792d4bf36c2 3365
Bogdan Marinescu 0:a792d4bf36c2 3366 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3367 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3368 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3369 }
Bogdan Marinescu 0:a792d4bf36c2 3370
Bogdan Marinescu 0:a792d4bf36c2 3371 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3372 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const volatile, C0 c0) {
Bogdan Marinescu 0:a792d4bf36c2 3373 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0);
Bogdan Marinescu 0:a792d4bf36c2 3374 }
Bogdan Marinescu 0:a792d4bf36c2 3375
Christopher Haster 14:65535458dd6f 3376 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3377 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2, A3, A4)> cb, C0 c0) {
Christopher Haster 14:65535458dd6f 3378 return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0);
Christopher Haster 14:65535458dd6f 3379 }
Christopher Haster 14:65535458dd6f 3380
Bogdan Marinescu 0:a792d4bf36c2 3381 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3382 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3383 return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3384 }
Bogdan Marinescu 0:a792d4bf36c2 3385
Bogdan Marinescu 0:a792d4bf36c2 3386 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3387 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3388 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3389 }
Bogdan Marinescu 0:a792d4bf36c2 3390
Bogdan Marinescu 0:a792d4bf36c2 3391 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3392 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3393 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3394 }
Bogdan Marinescu 0:a792d4bf36c2 3395
Bogdan Marinescu 0:a792d4bf36c2 3396 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3397 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3398 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3399 }
Bogdan Marinescu 0:a792d4bf36c2 3400
Bogdan Marinescu 0:a792d4bf36c2 3401 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3402 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1) {
Bogdan Marinescu 0:a792d4bf36c2 3403 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1);
Bogdan Marinescu 0:a792d4bf36c2 3404 }
Bogdan Marinescu 0:a792d4bf36c2 3405
Christopher Haster 14:65535458dd6f 3406 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3407 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1) {
Christopher Haster 14:65535458dd6f 3408 return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1);
Christopher Haster 14:65535458dd6f 3409 }
Christopher Haster 14:65535458dd6f 3410
Bogdan Marinescu 0:a792d4bf36c2 3411 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3412 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3413 return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3414 }
Bogdan Marinescu 0:a792d4bf36c2 3415
Bogdan Marinescu 0:a792d4bf36c2 3416 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3417 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3418 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3419 }
Bogdan Marinescu 0:a792d4bf36c2 3420
Bogdan Marinescu 0:a792d4bf36c2 3421 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3422 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3423 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3424 }
Bogdan Marinescu 0:a792d4bf36c2 3425
Bogdan Marinescu 0:a792d4bf36c2 3426 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3427 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3428 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3429 }
Bogdan Marinescu 0:a792d4bf36c2 3430
Bogdan Marinescu 0:a792d4bf36c2 3431 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3432 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2) {
Bogdan Marinescu 0:a792d4bf36c2 3433 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2);
Bogdan Marinescu 0:a792d4bf36c2 3434 }
Bogdan Marinescu 0:a792d4bf36c2 3435
Christopher Haster 14:65535458dd6f 3436 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3437 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2) {
Christopher Haster 14:65535458dd6f 3438 return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2);
Christopher Haster 14:65535458dd6f 3439 }
Christopher Haster 14:65535458dd6f 3440
Bogdan Marinescu 0:a792d4bf36c2 3441 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3442 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3443 return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3444 }
Bogdan Marinescu 0:a792d4bf36c2 3445
Bogdan Marinescu 0:a792d4bf36c2 3446 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3447 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3448 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3449 }
Bogdan Marinescu 0:a792d4bf36c2 3450
Bogdan Marinescu 0:a792d4bf36c2 3451 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3452 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3453 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3454 }
Bogdan Marinescu 0:a792d4bf36c2 3455
Bogdan Marinescu 0:a792d4bf36c2 3456 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3457 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3458 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3459 }
Bogdan Marinescu 0:a792d4bf36c2 3460
Bogdan Marinescu 0:a792d4bf36c2 3461 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3462 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) {
Bogdan Marinescu 0:a792d4bf36c2 3463 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3);
Bogdan Marinescu 0:a792d4bf36c2 3464 }
Bogdan Marinescu 0:a792d4bf36c2 3465
Christopher Haster 14:65535458dd6f 3466 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3467 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3) {
Christopher Haster 14:65535458dd6f 3468 return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2, c3);
Christopher Haster 14:65535458dd6f 3469 }
Christopher Haster 14:65535458dd6f 3470
Bogdan Marinescu 0:a792d4bf36c2 3471 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3472 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3473 return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3474 }
Bogdan Marinescu 0:a792d4bf36c2 3475
Bogdan Marinescu 0:a792d4bf36c2 3476 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3477 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3478 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3479 }
Bogdan Marinescu 0:a792d4bf36c2 3480
Bogdan Marinescu 0:a792d4bf36c2 3481 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3482 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3483 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3484 }
Bogdan Marinescu 0:a792d4bf36c2 3485
Bogdan Marinescu 0:a792d4bf36c2 3486 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3487 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3488 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3489 }
Bogdan Marinescu 0:a792d4bf36c2 3490
Bogdan Marinescu 0:a792d4bf36c2 3491 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Bogdan Marinescu 0:a792d4bf36c2 3492 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Bogdan Marinescu 0:a792d4bf36c2 3493 return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4);
Bogdan Marinescu 0:a792d4bf36c2 3494 }
Bogdan Marinescu 0:a792d4bf36c2 3495
Christopher Haster 14:65535458dd6f 3496 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4>
Christopher Haster 14:65535458dd6f 3497 Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) {
Christopher Haster 14:65535458dd6f 3498 return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2, c3, c4);
Christopher Haster 14:65535458dd6f 3499 }
Christopher Haster 14:65535458dd6f 3500
Bogdan Marinescu 0:a792d4bf36c2 3501 }
Bogdan Marinescu 0:a792d4bf36c2 3502
Bogdan Marinescu 0:a792d4bf36c2 3503 #endif
Jimmy Brisson 5:705843a08e16 3504
Jimmy Brisson 5:705843a08e16 3505 /** @}*/