|
14 | 14 | * limitations under the License.
|
15 | 15 | */
|
16 | 16 |
|
| 17 | +#include <stdio.h> |
17 | 18 | #include "ble/BLE.h"
|
18 | 19 | #include "ble/BLEInstanceBase.h"
|
19 | 20 |
|
@@ -139,7 +140,8 @@ void defaultSchedulingCallback(BLE::OnEventsToProcessCallbackContext* params) {
|
139 | 140 |
|
140 | 141 |
|
141 | 142 | BLE::BLE(InstanceID_t instanceIDIn) : instanceID(instanceIDIn), transport(),
|
142 |
| - whenEventsToProcess(defaultSchedulingCallback) |
| 143 | + whenEventsToProcess(defaultSchedulingCallback), |
| 144 | + event_signaled(false) |
143 | 145 | {
|
144 | 146 | static BLEInstanceBase *transportInstances[NUM_INSTANCES];
|
145 | 147 |
|
@@ -168,6 +170,7 @@ ble_error_t BLE::shutdown(void)
|
168 | 170 | error("bad handle to underlying transport");
|
169 | 171 | }
|
170 | 172 |
|
| 173 | + event_signaled = false; |
171 | 174 | return transport->shutdown();
|
172 | 175 | }
|
173 | 176 |
|
@@ -263,20 +266,41 @@ void BLE::waitForEvent(void)
|
263 | 266 |
|
264 | 267 | void BLE::processEvents()
|
265 | 268 | {
|
| 269 | + if (event_signaled == false) { |
| 270 | + return; |
| 271 | + } |
| 272 | + |
266 | 273 | if (!transport) {
|
267 | 274 | error("bad handle to underlying transport");
|
268 | 275 | }
|
269 | 276 |
|
| 277 | + event_signaled = false; |
| 278 | + |
270 | 279 | transport->processEvents();
|
271 | 280 | }
|
272 | 281 |
|
273 | 282 | void BLE::onEventsToProcess(const BLE::OnEventsToProcessCallback_t& callback)
|
274 | 283 | {
|
275 | 284 | whenEventsToProcess = callback;
|
| 285 | + |
| 286 | + // If events were previously signaled but the handler was not in place then |
| 287 | + // signal immediately events availability |
| 288 | + if (event_signaled && whenEventsToProcess) { |
| 289 | + OnEventsToProcessCallbackContext params = { |
| 290 | + *this |
| 291 | + }; |
| 292 | + whenEventsToProcess(¶ms); |
| 293 | + } |
276 | 294 | }
|
277 | 295 |
|
278 | 296 | void BLE::signalEventsToProcess()
|
279 | 297 | {
|
| 298 | + if (event_signaled == true) { |
| 299 | + return; |
| 300 | + } |
| 301 | + |
| 302 | + event_signaled = true; |
| 303 | + |
280 | 304 | if (whenEventsToProcess) {
|
281 | 305 | OnEventsToProcessCallbackContext params = {
|
282 | 306 | *this
|
|
0 commit comments