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:
2:a60d8117d0e0
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 */
Sam Grove 2:a60d8117d0e0 16 #include "events/EventQueue.h"
Bogdan Marinescu 0:a792d4bf36c2 17
Sam Grove 2:a60d8117d0e0 18 #include "events/mbed_events.h"
Bogdan Marinescu 0:a792d4bf36c2 19 #include "mbed.h"
Bogdan Marinescu 0:a792d4bf36c2 20
Bogdan Marinescu 0:a792d4bf36c2 21
Bogdan Marinescu 0:a792d4bf36c2 22 EventQueue::EventQueue(unsigned event_size, unsigned char *event_pointer) {
Bogdan Marinescu 0:a792d4bf36c2 23 if (!event_pointer) {
Bogdan Marinescu 0:a792d4bf36c2 24 equeue_create(&_equeue, event_size);
Bogdan Marinescu 0:a792d4bf36c2 25 } else {
Bogdan Marinescu 0:a792d4bf36c2 26 equeue_create_inplace(&_equeue, event_size, event_pointer);
Bogdan Marinescu 0:a792d4bf36c2 27 }
Bogdan Marinescu 0:a792d4bf36c2 28 }
Bogdan Marinescu 0:a792d4bf36c2 29
Bogdan Marinescu 0:a792d4bf36c2 30 EventQueue::~EventQueue() {
Bogdan Marinescu 0:a792d4bf36c2 31 equeue_destroy(&_equeue);
Bogdan Marinescu 0:a792d4bf36c2 32 }
Bogdan Marinescu 0:a792d4bf36c2 33
Bogdan Marinescu 0:a792d4bf36c2 34 void EventQueue::dispatch(int ms) {
Bogdan Marinescu 0:a792d4bf36c2 35 return equeue_dispatch(&_equeue, ms);
Bogdan Marinescu 0:a792d4bf36c2 36 }
Bogdan Marinescu 0:a792d4bf36c2 37
Bogdan Marinescu 0:a792d4bf36c2 38 void EventQueue::break_dispatch() {
Bogdan Marinescu 0:a792d4bf36c2 39 return equeue_break(&_equeue);
Bogdan Marinescu 0:a792d4bf36c2 40 }
Bogdan Marinescu 0:a792d4bf36c2 41
Bogdan Marinescu 0:a792d4bf36c2 42 unsigned EventQueue::tick() {
Bogdan Marinescu 0:a792d4bf36c2 43 return equeue_tick();
Bogdan Marinescu 0:a792d4bf36c2 44 }
Bogdan Marinescu 0:a792d4bf36c2 45
Bogdan Marinescu 0:a792d4bf36c2 46 void EventQueue::cancel(int id) {
Bogdan Marinescu 0:a792d4bf36c2 47 return equeue_cancel(&_equeue, id);
Bogdan Marinescu 0:a792d4bf36c2 48 }
Bogdan Marinescu 0:a792d4bf36c2 49
Bogdan Marinescu 0:a792d4bf36c2 50 void EventQueue::background(Callback<void(int)> update) {
Bogdan Marinescu 0:a792d4bf36c2 51 _update = update;
Bogdan Marinescu 0:a792d4bf36c2 52
Bogdan Marinescu 0:a792d4bf36c2 53 if (_update) {
Bogdan Marinescu 0:a792d4bf36c2 54 equeue_background(&_equeue, &Callback<void(int)>::thunk, &_update);
Bogdan Marinescu 0:a792d4bf36c2 55 } else {
Bogdan Marinescu 0:a792d4bf36c2 56 equeue_background(&_equeue, 0, 0);
Bogdan Marinescu 0:a792d4bf36c2 57 }
Bogdan Marinescu 0:a792d4bf36c2 58 }
Bogdan Marinescu 0:a792d4bf36c2 59
Bogdan Marinescu 0:a792d4bf36c2 60 void EventQueue::chain(EventQueue *target) {
Bogdan Marinescu 0:a792d4bf36c2 61 if (target) {
Bogdan Marinescu 0:a792d4bf36c2 62 equeue_chain(&_equeue, &target->_equeue);
Bogdan Marinescu 0:a792d4bf36c2 63 } else {
Bogdan Marinescu 0:a792d4bf36c2 64 equeue_chain(&_equeue, 0);
Bogdan Marinescu 0:a792d4bf36c2 65 }
Bogdan Marinescu 0:a792d4bf36c2 66 }