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:
Wolfgang Betz
Date:
Tue Sep 05 09:09:24 2017 +0200
Revision:
9832:b95afde9ef7e
Parent:
9825:e033ed92ed49
Merge branch 'master' of hg::http://developer.mbed.org/teams/ST/code/ST_Events into events-split

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