Christopher Haster / mbed-hal

Dependencies:   target-freescale

Fork of mbed-hal by Morpheus

Committer:
Christopher Haster
Date:
Wed Apr 06 09:41:33 2016 -0500
Revision:
20:fbc6173aa5b2
Parent:
0:9c59db1fbc9e
Added Binder class for statically allocated function binding

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:9c59db1fbc9e 1 /* mbed Microcontroller Library
screamer 0:9c59db1fbc9e 2 * Copyright (c) 2015 ARM Limited
screamer 0:9c59db1fbc9e 3 *
screamer 0:9c59db1fbc9e 4 * Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:9c59db1fbc9e 5 * you may not use this file except in compliance with the License.
screamer 0:9c59db1fbc9e 6 * You may obtain a copy of the License at
screamer 0:9c59db1fbc9e 7 *
screamer 0:9c59db1fbc9e 8 * http://www.apache.org/licenses/LICENSE-2.0
screamer 0:9c59db1fbc9e 9 *
screamer 0:9c59db1fbc9e 10 * Unless required by applicable law or agreed to in writing, software
screamer 0:9c59db1fbc9e 11 * distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:9c59db1fbc9e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:9c59db1fbc9e 13 * See the License for the specific language governing permissions and
screamer 0:9c59db1fbc9e 14 * limitations under the License.
screamer 0:9c59db1fbc9e 15 */
screamer 0:9c59db1fbc9e 16 #ifndef MBED_TICKER_API_H
screamer 0:9c59db1fbc9e 17 #define MBED_TICKER_API_H
screamer 0:9c59db1fbc9e 18
screamer 0:9c59db1fbc9e 19 #include "device.h"
screamer 0:9c59db1fbc9e 20
screamer 0:9c59db1fbc9e 21 typedef uint32_t timestamp_t;
screamer 0:9c59db1fbc9e 22
screamer 0:9c59db1fbc9e 23 /** Ticker's event structure
screamer 0:9c59db1fbc9e 24 */
screamer 0:9c59db1fbc9e 25 typedef struct ticker_event_s {
screamer 0:9c59db1fbc9e 26 timestamp_t timestamp; /**< Event's timestamp */
screamer 0:9c59db1fbc9e 27 uint32_t id; /**< TimerEvent object */
screamer 0:9c59db1fbc9e 28 struct ticker_event_s *next; /**< Next event in the queue */
screamer 0:9c59db1fbc9e 29 } ticker_event_t;
screamer 0:9c59db1fbc9e 30
screamer 0:9c59db1fbc9e 31 typedef void (*ticker_event_handler)(uint32_t id);
screamer 0:9c59db1fbc9e 32
screamer 0:9c59db1fbc9e 33 /** Ticker's interface structure - required API for a ticker
screamer 0:9c59db1fbc9e 34 */
screamer 0:9c59db1fbc9e 35 typedef struct {
screamer 0:9c59db1fbc9e 36 void (*init)(void); /**< Init function */
screamer 0:9c59db1fbc9e 37 uint32_t (*read)(void); /**< Read function */
screamer 0:9c59db1fbc9e 38 void (*disable_interrupt)(void); /**< Disable interrupt function */
screamer 0:9c59db1fbc9e 39 void (*clear_interrupt)(void); /**< Clear interrupt function */
screamer 0:9c59db1fbc9e 40 void (*set_interrupt)(timestamp_t timestamp); /**< Set interrupt function */
screamer 0:9c59db1fbc9e 41 } ticker_interface_t;
screamer 0:9c59db1fbc9e 42
screamer 0:9c59db1fbc9e 43 /** Tickers events queue structure
screamer 0:9c59db1fbc9e 44 */
screamer 0:9c59db1fbc9e 45 typedef struct {
screamer 0:9c59db1fbc9e 46 ticker_event_handler event_handler; /**< Event handler */
screamer 0:9c59db1fbc9e 47 ticker_event_t *head; /**< A pointer to head */
screamer 0:9c59db1fbc9e 48 } ticker_event_queue_t;
screamer 0:9c59db1fbc9e 49
screamer 0:9c59db1fbc9e 50 /** Tickers data structure
screamer 0:9c59db1fbc9e 51 */
screamer 0:9c59db1fbc9e 52 typedef struct {
screamer 0:9c59db1fbc9e 53 const ticker_interface_t *interface; /**< Ticker's interface */
screamer 0:9c59db1fbc9e 54 ticker_event_queue_t *queue; /**< Ticker's events queue */
screamer 0:9c59db1fbc9e 55 } ticker_data_t;
screamer 0:9c59db1fbc9e 56
screamer 0:9c59db1fbc9e 57 #ifdef __cplusplus
screamer 0:9c59db1fbc9e 58 extern "C" {
screamer 0:9c59db1fbc9e 59 #endif
screamer 0:9c59db1fbc9e 60
screamer 0:9c59db1fbc9e 61 /** Initialize a ticker and sets the event handler
screamer 0:9c59db1fbc9e 62 *
screamer 0:9c59db1fbc9e 63 * @param data The ticker's data
screamer 0:9c59db1fbc9e 64 * @param handler A handler to be set
screamer 0:9c59db1fbc9e 65 */
screamer 0:9c59db1fbc9e 66 void ticker_set_handler(const ticker_data_t *const data, ticker_event_handler handler);
screamer 0:9c59db1fbc9e 67
screamer 0:9c59db1fbc9e 68 /** Irq handler which goes through the events to trigger events in the past.
screamer 0:9c59db1fbc9e 69 *
screamer 0:9c59db1fbc9e 70 * @param data The ticker's data
screamer 0:9c59db1fbc9e 71 */
screamer 0:9c59db1fbc9e 72 void ticker_irq_handler(const ticker_data_t *const data);
screamer 0:9c59db1fbc9e 73
screamer 0:9c59db1fbc9e 74 /** Remove an event from the queue
screamer 0:9c59db1fbc9e 75 *
screamer 0:9c59db1fbc9e 76 * @param data The ticker's data
screamer 0:9c59db1fbc9e 77 * @param obj The event's queue to be removed
screamer 0:9c59db1fbc9e 78 */
screamer 0:9c59db1fbc9e 79 void ticker_remove_event(const ticker_data_t *const data, ticker_event_t *obj);
screamer 0:9c59db1fbc9e 80
screamer 0:9c59db1fbc9e 81 /** Insert an event from the queue
screamer 0:9c59db1fbc9e 82 *
screamer 0:9c59db1fbc9e 83 * @param data The ticker's data
screamer 0:9c59db1fbc9e 84 * @param obj The event's queue to be removed
screamer 0:9c59db1fbc9e 85 * @param timestamp The event's timestamp
screamer 0:9c59db1fbc9e 86 * @param id The event object
screamer 0:9c59db1fbc9e 87 */
screamer 0:9c59db1fbc9e 88 void ticker_insert_event(const ticker_data_t *const data, ticker_event_t *obj, timestamp_t timestamp, uint32_t id);
screamer 0:9c59db1fbc9e 89
screamer 0:9c59db1fbc9e 90 /** Read the current ticker's timestamp
screamer 0:9c59db1fbc9e 91 *
screamer 0:9c59db1fbc9e 92 * @param data The ticker's data
screamer 0:9c59db1fbc9e 93 * @return The current timestamp
screamer 0:9c59db1fbc9e 94 */
screamer 0:9c59db1fbc9e 95 timestamp_t ticker_read(const ticker_data_t *const data);
screamer 0:9c59db1fbc9e 96
screamer 0:9c59db1fbc9e 97 /** Read the next event's timestamp
screamer 0:9c59db1fbc9e 98 *
screamer 0:9c59db1fbc9e 99 * @param data The ticker's data
screamer 0:9c59db1fbc9e 100 * @return 1 if timestamp is pending event, 0 if there's no event pending
screamer 0:9c59db1fbc9e 101 */
screamer 0:9c59db1fbc9e 102 int ticker_get_next_timestamp(const ticker_data_t *const data, timestamp_t *timestamp);
screamer 0:9c59db1fbc9e 103
screamer 0:9c59db1fbc9e 104 #ifdef __cplusplus
screamer 0:9c59db1fbc9e 105 }
screamer 0:9c59db1fbc9e 106 #endif
screamer 0:9c59db1fbc9e 107
screamer 0:9c59db1fbc9e 108 #endif
screamer 0:9c59db1fbc9e 109