Rtos API example

Committer:
marcozecchini
Date:
Sat Feb 23 12:13:36 2019 +0000
Revision:
0:9fca2b23d0ba
final commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcozecchini 0:9fca2b23d0ba 1 /* mbed Microcontroller Library
marcozecchini 0:9fca2b23d0ba 2 * Copyright (c) 2006-2013 ARM Limited
marcozecchini 0:9fca2b23d0ba 3 *
marcozecchini 0:9fca2b23d0ba 4 * Licensed under the Apache License, Version 2.0 (the "License");
marcozecchini 0:9fca2b23d0ba 5 * you may not use this file except in compliance with the License.
marcozecchini 0:9fca2b23d0ba 6 * You may obtain a copy of the License at
marcozecchini 0:9fca2b23d0ba 7 *
marcozecchini 0:9fca2b23d0ba 8 * http://www.apache.org/licenses/LICENSE-2.0
marcozecchini 0:9fca2b23d0ba 9 *
marcozecchini 0:9fca2b23d0ba 10 * Unless required by applicable law or agreed to in writing, software
marcozecchini 0:9fca2b23d0ba 11 * distributed under the License is distributed on an "AS IS" BASIS,
marcozecchini 0:9fca2b23d0ba 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
marcozecchini 0:9fca2b23d0ba 13 * See the License for the specific language governing permissions and
marcozecchini 0:9fca2b23d0ba 14 * limitations under the License.
marcozecchini 0:9fca2b23d0ba 15 */
marcozecchini 0:9fca2b23d0ba 16
marcozecchini 0:9fca2b23d0ba 17 #include <stdio.h>
marcozecchini 0:9fca2b23d0ba 18 #include "ble/BLE.h"
marcozecchini 0:9fca2b23d0ba 19 #include "ble/BLEInstanceBase.h"
marcozecchini 0:9fca2b23d0ba 20
marcozecchini 0:9fca2b23d0ba 21 #if defined(TARGET_OTA_ENABLED)
marcozecchini 0:9fca2b23d0ba 22 #include "ble/services/DFUService.h"
marcozecchini 0:9fca2b23d0ba 23 #endif
marcozecchini 0:9fca2b23d0ba 24
marcozecchini 0:9fca2b23d0ba 25 #ifdef YOTTA_CFG_MBED_OS
marcozecchini 0:9fca2b23d0ba 26 #include <minar/minar.h>
marcozecchini 0:9fca2b23d0ba 27 #endif
marcozecchini 0:9fca2b23d0ba 28
marcozecchini 0:9fca2b23d0ba 29 #if !defined(YOTTA_CFG_MBED_OS)
marcozecchini 0:9fca2b23d0ba 30 #include <mbed_error.h>
marcozecchini 0:9fca2b23d0ba 31 #include <toolchain.h>
marcozecchini 0:9fca2b23d0ba 32 #endif
marcozecchini 0:9fca2b23d0ba 33
marcozecchini 0:9fca2b23d0ba 34 ble_error_t
marcozecchini 0:9fca2b23d0ba 35 BLE::initImplementation(FunctionPointerWithContext<InitializationCompleteCallbackContext*> callback)
marcozecchini 0:9fca2b23d0ba 36 {
marcozecchini 0:9fca2b23d0ba 37 ble_error_t err = transport->init(instanceID, callback);
marcozecchini 0:9fca2b23d0ba 38 if (err != BLE_ERROR_NONE) {
marcozecchini 0:9fca2b23d0ba 39 return err;
marcozecchini 0:9fca2b23d0ba 40 }
marcozecchini 0:9fca2b23d0ba 41
marcozecchini 0:9fca2b23d0ba 42 /* Platforms enabled for DFU should introduce the DFU Service into
marcozecchini 0:9fca2b23d0ba 43 * applications automatically. */
marcozecchini 0:9fca2b23d0ba 44 #if defined(TARGET_OTA_ENABLED)
marcozecchini 0:9fca2b23d0ba 45 static DFUService dfu(*this); // defined static so that the object remains alive
marcozecchini 0:9fca2b23d0ba 46 #endif // TARGET_OTA_ENABLED
marcozecchini 0:9fca2b23d0ba 47
marcozecchini 0:9fca2b23d0ba 48 return BLE_ERROR_NONE;
marcozecchini 0:9fca2b23d0ba 49 }
marcozecchini 0:9fca2b23d0ba 50
marcozecchini 0:9fca2b23d0ba 51 /**
marcozecchini 0:9fca2b23d0ba 52 * BLE::Instance() and BLE constructor rely upon a static array of initializers
marcozecchini 0:9fca2b23d0ba 53 * to create actual BLE transport instances. A description of these instances
marcozecchini 0:9fca2b23d0ba 54 * and initializers is supposed to be put in some .json file contributing to
marcozecchini 0:9fca2b23d0ba 55 * yotta's configuration (typically in the target definition described by
marcozecchini 0:9fca2b23d0ba 56 * target.json). Here's a sample:
marcozecchini 0:9fca2b23d0ba 57 *
marcozecchini 0:9fca2b23d0ba 58 * "config": {
marcozecchini 0:9fca2b23d0ba 59 * ...
marcozecchini 0:9fca2b23d0ba 60 * "ble_instances": {
marcozecchini 0:9fca2b23d0ba 61 * "count": 1,
marcozecchini 0:9fca2b23d0ba 62 * "0" : {
marcozecchini 0:9fca2b23d0ba 63 * "initializer" : "createBLEInstance"
marcozecchini 0:9fca2b23d0ba 64 * }
marcozecchini 0:9fca2b23d0ba 65 * }
marcozecchini 0:9fca2b23d0ba 66 * ...
marcozecchini 0:9fca2b23d0ba 67 * }
marcozecchini 0:9fca2b23d0ba 68 *
marcozecchini 0:9fca2b23d0ba 69 * The following macros result in translating the above config into a static
marcozecchini 0:9fca2b23d0ba 70 * array: instanceConstructors.
marcozecchini 0:9fca2b23d0ba 71 */
marcozecchini 0:9fca2b23d0ba 72 #ifdef YOTTA_CFG_BLE_INSTANCES_COUNT
marcozecchini 0:9fca2b23d0ba 73 #define CONCATENATE(A, B) A ## B
marcozecchini 0:9fca2b23d0ba 74 #define EXPAND(X) X /* this adds a level of indirection needed to allow macro-expansion following a token-paste operation (see use of CONCATENATE() below). */
marcozecchini 0:9fca2b23d0ba 75
marcozecchini 0:9fca2b23d0ba 76 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_1 YOTTA_CFG_BLE_INSTANCES_0_INITIALIZER
marcozecchini 0:9fca2b23d0ba 77 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_2 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_1, YOTTA_CFG_BLE_INSTANCES_1_INITIALIZER
marcozecchini 0:9fca2b23d0ba 78 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_3 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_2, YOTTA_CFG_BLE_INSTANCES_2_INITIALIZER
marcozecchini 0:9fca2b23d0ba 79 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_4 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_3, YOTTA_CFG_BLE_INSTANCES_3_INITIALIZER
marcozecchini 0:9fca2b23d0ba 80 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_5 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_4, YOTTA_CFG_BLE_INSTANCES_4_INITIALIZER
marcozecchini 0:9fca2b23d0ba 81 /* ... add more of the above if ever needed */
marcozecchini 0:9fca2b23d0ba 82
marcozecchini 0:9fca2b23d0ba 83 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS(N) EXPAND(CONCATENATE(INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS_, N))
marcozecchini 0:9fca2b23d0ba 84 #elif !defined(INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS)
marcozecchini 0:9fca2b23d0ba 85 /*
marcozecchini 0:9fca2b23d0ba 86 * The following applies when building without yotta. By default BLE_API provides
marcozecchini 0:9fca2b23d0ba 87 * a trivial initializer list containing a single constructor: createBLEInstance.
marcozecchini 0:9fca2b23d0ba 88 * This may be overridden.
marcozecchini 0:9fca2b23d0ba 89 */
marcozecchini 0:9fca2b23d0ba 90 #define INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS createBLEInstance
marcozecchini 0:9fca2b23d0ba 91
marcozecchini 0:9fca2b23d0ba 92 // yotta unlike mbed-cli has proper dependency mechanisms
marcozecchini 0:9fca2b23d0ba 93 // It is not required to defined a stub for createBLEInstance
marcozecchini 0:9fca2b23d0ba 94 #if !defined(YOTTA_CFG_MBED_OS)
marcozecchini 0:9fca2b23d0ba 95
marcozecchini 0:9fca2b23d0ba 96 // this stub is required by ARMCC otherwise link will systematically fail
marcozecchini 0:9fca2b23d0ba 97 MBED_WEAK BLEInstanceBase* createBLEInstance() {
marcozecchini 0:9fca2b23d0ba 98 error("Please provide an implementation for mbed BLE");
marcozecchini 0:9fca2b23d0ba 99 return NULL;
marcozecchini 0:9fca2b23d0ba 100 }
marcozecchini 0:9fca2b23d0ba 101
marcozecchini 0:9fca2b23d0ba 102 #endif
marcozecchini 0:9fca2b23d0ba 103
marcozecchini 0:9fca2b23d0ba 104
marcozecchini 0:9fca2b23d0ba 105 #endif /* YOTTA_CFG_BLE_INSTANCES_COUNT */
marcozecchini 0:9fca2b23d0ba 106
marcozecchini 0:9fca2b23d0ba 107 typedef BLEInstanceBase *(*InstanceConstructor_t)(void);
marcozecchini 0:9fca2b23d0ba 108 static const InstanceConstructor_t instanceConstructors[BLE::NUM_INSTANCES] = {
marcozecchini 0:9fca2b23d0ba 109 #ifndef YOTTA_CFG_BLE_INSTANCES_COUNT
marcozecchini 0:9fca2b23d0ba 110 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS
marcozecchini 0:9fca2b23d0ba 111 #else
marcozecchini 0:9fca2b23d0ba 112 INITIALIZER_LIST_FOR_INSTANCE_CONSTRUCTORS(YOTTA_CFG_BLE_INSTANCES_COUNT)
marcozecchini 0:9fca2b23d0ba 113 #endif
marcozecchini 0:9fca2b23d0ba 114 };
marcozecchini 0:9fca2b23d0ba 115
marcozecchini 0:9fca2b23d0ba 116 BLE &
marcozecchini 0:9fca2b23d0ba 117 BLE::Instance(InstanceID_t id)
marcozecchini 0:9fca2b23d0ba 118 {
marcozecchini 0:9fca2b23d0ba 119 static BLE *singletons[NUM_INSTANCES];
marcozecchini 0:9fca2b23d0ba 120 if (id < NUM_INSTANCES) {
marcozecchini 0:9fca2b23d0ba 121 if (singletons[id] == NULL) {
marcozecchini 0:9fca2b23d0ba 122 singletons[id] = new BLE(id); /* This object will never be freed. */
marcozecchini 0:9fca2b23d0ba 123 }
marcozecchini 0:9fca2b23d0ba 124
marcozecchini 0:9fca2b23d0ba 125 return *singletons[id];
marcozecchini 0:9fca2b23d0ba 126 }
marcozecchini 0:9fca2b23d0ba 127
marcozecchini 0:9fca2b23d0ba 128 /* we come here only in the case of a bad interfaceID. */
marcozecchini 0:9fca2b23d0ba 129 static BLE badSingleton(NUM_INSTANCES /* this is a bad index; and will result in a NULL transport. */);
marcozecchini 0:9fca2b23d0ba 130 return badSingleton;
marcozecchini 0:9fca2b23d0ba 131 }
marcozecchini 0:9fca2b23d0ba 132
marcozecchini 0:9fca2b23d0ba 133 #ifdef YOTTA_CFG_MBED_OS
marcozecchini 0:9fca2b23d0ba 134 void defaultSchedulingCallback(BLE::OnEventsToProcessCallbackContext* params) {
marcozecchini 0:9fca2b23d0ba 135 minar::Scheduler::postCallback(&params->ble, &BLE::processEvents);
marcozecchini 0:9fca2b23d0ba 136 }
marcozecchini 0:9fca2b23d0ba 137 #else
marcozecchini 0:9fca2b23d0ba 138 #define defaultSchedulingCallback NULL
marcozecchini 0:9fca2b23d0ba 139 #endif
marcozecchini 0:9fca2b23d0ba 140
marcozecchini 0:9fca2b23d0ba 141
marcozecchini 0:9fca2b23d0ba 142 BLE::BLE(InstanceID_t instanceIDIn) : instanceID(instanceIDIn), transport(),
marcozecchini 0:9fca2b23d0ba 143 whenEventsToProcess(defaultSchedulingCallback),
marcozecchini 0:9fca2b23d0ba 144 event_signaled(false)
marcozecchini 0:9fca2b23d0ba 145 {
marcozecchini 0:9fca2b23d0ba 146 static BLEInstanceBase *transportInstances[NUM_INSTANCES];
marcozecchini 0:9fca2b23d0ba 147
marcozecchini 0:9fca2b23d0ba 148 if (instanceID < NUM_INSTANCES) {
marcozecchini 0:9fca2b23d0ba 149 if (!transportInstances[instanceID]) {
marcozecchini 0:9fca2b23d0ba 150 transportInstances[instanceID] = instanceConstructors[instanceID](); /* Call the stack's initializer for the transport object. */
marcozecchini 0:9fca2b23d0ba 151 }
marcozecchini 0:9fca2b23d0ba 152 transport = transportInstances[instanceID];
marcozecchini 0:9fca2b23d0ba 153 } else {
marcozecchini 0:9fca2b23d0ba 154 transport = NULL;
marcozecchini 0:9fca2b23d0ba 155 }
marcozecchini 0:9fca2b23d0ba 156 }
marcozecchini 0:9fca2b23d0ba 157
marcozecchini 0:9fca2b23d0ba 158 bool BLE::hasInitialized(void) const
marcozecchini 0:9fca2b23d0ba 159 {
marcozecchini 0:9fca2b23d0ba 160 if (!transport) {
marcozecchini 0:9fca2b23d0ba 161 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 162 }
marcozecchini 0:9fca2b23d0ba 163
marcozecchini 0:9fca2b23d0ba 164 return transport->hasInitialized();
marcozecchini 0:9fca2b23d0ba 165 }
marcozecchini 0:9fca2b23d0ba 166
marcozecchini 0:9fca2b23d0ba 167 ble_error_t BLE::shutdown(void)
marcozecchini 0:9fca2b23d0ba 168 {
marcozecchini 0:9fca2b23d0ba 169 if (!transport) {
marcozecchini 0:9fca2b23d0ba 170 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 171 }
marcozecchini 0:9fca2b23d0ba 172
marcozecchini 0:9fca2b23d0ba 173 event_signaled = false;
marcozecchini 0:9fca2b23d0ba 174 return transport->shutdown();
marcozecchini 0:9fca2b23d0ba 175 }
marcozecchini 0:9fca2b23d0ba 176
marcozecchini 0:9fca2b23d0ba 177 const char *BLE::getVersion(void)
marcozecchini 0:9fca2b23d0ba 178 {
marcozecchini 0:9fca2b23d0ba 179 if (!transport) {
marcozecchini 0:9fca2b23d0ba 180 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 181 }
marcozecchini 0:9fca2b23d0ba 182
marcozecchini 0:9fca2b23d0ba 183 return transport->getVersion();
marcozecchini 0:9fca2b23d0ba 184 }
marcozecchini 0:9fca2b23d0ba 185
marcozecchini 0:9fca2b23d0ba 186 const Gap &BLE::gap() const
marcozecchini 0:9fca2b23d0ba 187 {
marcozecchini 0:9fca2b23d0ba 188 if (!transport) {
marcozecchini 0:9fca2b23d0ba 189 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 190 }
marcozecchini 0:9fca2b23d0ba 191
marcozecchini 0:9fca2b23d0ba 192 return transport->getGap();
marcozecchini 0:9fca2b23d0ba 193 }
marcozecchini 0:9fca2b23d0ba 194
marcozecchini 0:9fca2b23d0ba 195 Gap &BLE::gap()
marcozecchini 0:9fca2b23d0ba 196 {
marcozecchini 0:9fca2b23d0ba 197 if (!transport) {
marcozecchini 0:9fca2b23d0ba 198 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 199 }
marcozecchini 0:9fca2b23d0ba 200
marcozecchini 0:9fca2b23d0ba 201 return transport->getGap();
marcozecchini 0:9fca2b23d0ba 202 }
marcozecchini 0:9fca2b23d0ba 203
marcozecchini 0:9fca2b23d0ba 204 const GattServer& BLE::gattServer() const
marcozecchini 0:9fca2b23d0ba 205 {
marcozecchini 0:9fca2b23d0ba 206 if (!transport) {
marcozecchini 0:9fca2b23d0ba 207 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 208 }
marcozecchini 0:9fca2b23d0ba 209
marcozecchini 0:9fca2b23d0ba 210 return transport->getGattServer();
marcozecchini 0:9fca2b23d0ba 211 }
marcozecchini 0:9fca2b23d0ba 212
marcozecchini 0:9fca2b23d0ba 213 GattServer& BLE::gattServer()
marcozecchini 0:9fca2b23d0ba 214 {
marcozecchini 0:9fca2b23d0ba 215 if (!transport) {
marcozecchini 0:9fca2b23d0ba 216 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 217 }
marcozecchini 0:9fca2b23d0ba 218
marcozecchini 0:9fca2b23d0ba 219 return transport->getGattServer();
marcozecchini 0:9fca2b23d0ba 220 }
marcozecchini 0:9fca2b23d0ba 221
marcozecchini 0:9fca2b23d0ba 222 const GattClient& BLE::gattClient() const
marcozecchini 0:9fca2b23d0ba 223 {
marcozecchini 0:9fca2b23d0ba 224 if (!transport) {
marcozecchini 0:9fca2b23d0ba 225 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 226 }
marcozecchini 0:9fca2b23d0ba 227
marcozecchini 0:9fca2b23d0ba 228 return transport->getGattClient();
marcozecchini 0:9fca2b23d0ba 229 }
marcozecchini 0:9fca2b23d0ba 230
marcozecchini 0:9fca2b23d0ba 231 GattClient& BLE::gattClient()
marcozecchini 0:9fca2b23d0ba 232 {
marcozecchini 0:9fca2b23d0ba 233 if (!transport) {
marcozecchini 0:9fca2b23d0ba 234 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 235 }
marcozecchini 0:9fca2b23d0ba 236
marcozecchini 0:9fca2b23d0ba 237 return transport->getGattClient();
marcozecchini 0:9fca2b23d0ba 238 }
marcozecchini 0:9fca2b23d0ba 239
marcozecchini 0:9fca2b23d0ba 240 const SecurityManager& BLE::securityManager() const
marcozecchini 0:9fca2b23d0ba 241 {
marcozecchini 0:9fca2b23d0ba 242 if (!transport) {
marcozecchini 0:9fca2b23d0ba 243 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 244 }
marcozecchini 0:9fca2b23d0ba 245
marcozecchini 0:9fca2b23d0ba 246 return transport->getSecurityManager();
marcozecchini 0:9fca2b23d0ba 247 }
marcozecchini 0:9fca2b23d0ba 248
marcozecchini 0:9fca2b23d0ba 249 SecurityManager& BLE::securityManager()
marcozecchini 0:9fca2b23d0ba 250 {
marcozecchini 0:9fca2b23d0ba 251 if (!transport) {
marcozecchini 0:9fca2b23d0ba 252 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 253 }
marcozecchini 0:9fca2b23d0ba 254
marcozecchini 0:9fca2b23d0ba 255 return transport->getSecurityManager();
marcozecchini 0:9fca2b23d0ba 256 }
marcozecchini 0:9fca2b23d0ba 257
marcozecchini 0:9fca2b23d0ba 258 void BLE::waitForEvent(void)
marcozecchini 0:9fca2b23d0ba 259 {
marcozecchini 0:9fca2b23d0ba 260 if (!transport) {
marcozecchini 0:9fca2b23d0ba 261 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 262 }
marcozecchini 0:9fca2b23d0ba 263
marcozecchini 0:9fca2b23d0ba 264 transport->waitForEvent();
marcozecchini 0:9fca2b23d0ba 265 }
marcozecchini 0:9fca2b23d0ba 266
marcozecchini 0:9fca2b23d0ba 267 void BLE::processEvents()
marcozecchini 0:9fca2b23d0ba 268 {
marcozecchini 0:9fca2b23d0ba 269 if (event_signaled == false) {
marcozecchini 0:9fca2b23d0ba 270 return;
marcozecchini 0:9fca2b23d0ba 271 }
marcozecchini 0:9fca2b23d0ba 272
marcozecchini 0:9fca2b23d0ba 273 if (!transport) {
marcozecchini 0:9fca2b23d0ba 274 error("bad handle to underlying transport");
marcozecchini 0:9fca2b23d0ba 275 }
marcozecchini 0:9fca2b23d0ba 276
marcozecchini 0:9fca2b23d0ba 277 event_signaled = false;
marcozecchini 0:9fca2b23d0ba 278
marcozecchini 0:9fca2b23d0ba 279 transport->processEvents();
marcozecchini 0:9fca2b23d0ba 280 }
marcozecchini 0:9fca2b23d0ba 281
marcozecchini 0:9fca2b23d0ba 282 void BLE::onEventsToProcess(const BLE::OnEventsToProcessCallback_t& callback)
marcozecchini 0:9fca2b23d0ba 283 {
marcozecchini 0:9fca2b23d0ba 284 whenEventsToProcess = callback;
marcozecchini 0:9fca2b23d0ba 285
marcozecchini 0:9fca2b23d0ba 286 // If events were previously signaled but the handler was not in place then
marcozecchini 0:9fca2b23d0ba 287 // signal immediately events availability
marcozecchini 0:9fca2b23d0ba 288 if (event_signaled && whenEventsToProcess) {
marcozecchini 0:9fca2b23d0ba 289 OnEventsToProcessCallbackContext params = {
marcozecchini 0:9fca2b23d0ba 290 *this
marcozecchini 0:9fca2b23d0ba 291 };
marcozecchini 0:9fca2b23d0ba 292 whenEventsToProcess(&params);
marcozecchini 0:9fca2b23d0ba 293 }
marcozecchini 0:9fca2b23d0ba 294 }
marcozecchini 0:9fca2b23d0ba 295
marcozecchini 0:9fca2b23d0ba 296 void BLE::signalEventsToProcess()
marcozecchini 0:9fca2b23d0ba 297 {
marcozecchini 0:9fca2b23d0ba 298 if (event_signaled == true) {
marcozecchini 0:9fca2b23d0ba 299 return;
marcozecchini 0:9fca2b23d0ba 300 }
marcozecchini 0:9fca2b23d0ba 301
marcozecchini 0:9fca2b23d0ba 302 event_signaled = true;
marcozecchini 0:9fca2b23d0ba 303
marcozecchini 0:9fca2b23d0ba 304 if (whenEventsToProcess) {
marcozecchini 0:9fca2b23d0ba 305 OnEventsToProcessCallbackContext params = {
marcozecchini 0:9fca2b23d0ba 306 *this
marcozecchini 0:9fca2b23d0ba 307 };
marcozecchini 0:9fca2b23d0ba 308 whenEventsToProcess(&params);
marcozecchini 0:9fca2b23d0ba 309 }
marcozecchini 0:9fca2b23d0ba 310 }