my fork

Dependencies:   mbed

Committer:
filartrix
Date:
Wed Apr 08 14:17:20 2015 +0000
Revision:
4:987b201ec4b1
first

Who changed what in which revision?

UserRevisionLine numberNew contents of line
filartrix 4:987b201ec4b1 1 /*
filartrix 4:987b201ec4b1 2 * Copyright (c) 2004, Swedish Institute of Computer Science.
filartrix 4:987b201ec4b1 3 * All rights reserved.
filartrix 4:987b201ec4b1 4 *
filartrix 4:987b201ec4b1 5 * Redistribution and use in source and binary forms, with or without
filartrix 4:987b201ec4b1 6 * modification, are permitted provided that the following conditions
filartrix 4:987b201ec4b1 7 * are met:
filartrix 4:987b201ec4b1 8 * 1. Redistributions of source code must retain the above copyright
filartrix 4:987b201ec4b1 9 * notice, this list of conditions and the following disclaimer.
filartrix 4:987b201ec4b1 10 * 2. Redistributions in binary form must reproduce the above copyright
filartrix 4:987b201ec4b1 11 * notice, this list of conditions and the following disclaimer in the
filartrix 4:987b201ec4b1 12 * documentation and/or other materials provided with the distribution.
filartrix 4:987b201ec4b1 13 * 3. Neither the name of the Institute nor the names of its contributors
filartrix 4:987b201ec4b1 14 * may be used to endorse or promote products derived from this software
filartrix 4:987b201ec4b1 15 * without specific prior written permission.
filartrix 4:987b201ec4b1 16 *
filartrix 4:987b201ec4b1 17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
filartrix 4:987b201ec4b1 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
filartrix 4:987b201ec4b1 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
filartrix 4:987b201ec4b1 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
filartrix 4:987b201ec4b1 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
filartrix 4:987b201ec4b1 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
filartrix 4:987b201ec4b1 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
filartrix 4:987b201ec4b1 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
filartrix 4:987b201ec4b1 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
filartrix 4:987b201ec4b1 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
filartrix 4:987b201ec4b1 27 * SUCH DAMAGE.
filartrix 4:987b201ec4b1 28 *
filartrix 4:987b201ec4b1 29 * This file is part of the Contiki operating system.
filartrix 4:987b201ec4b1 30 *
filartrix 4:987b201ec4b1 31 * Author: Adam Dunkels <adam@sics.se>
filartrix 4:987b201ec4b1 32 *
filartrix 4:987b201ec4b1 33 */
filartrix 4:987b201ec4b1 34
filartrix 4:987b201ec4b1 35 #include "clock.h"
filartrix 4:987b201ec4b1 36 #include "gp_timer.h"
filartrix 4:987b201ec4b1 37
filartrix 4:987b201ec4b1 38 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 39 /**
filartrix 4:987b201ec4b1 40 * Set a timer.
filartrix 4:987b201ec4b1 41 *
filartrix 4:987b201ec4b1 42 * This function sets a timer for a time sometime in the
filartrix 4:987b201ec4b1 43 * future. The function timer_expired() will evaluate to true after
filartrix 4:987b201ec4b1 44 * the timer has expired.
filartrix 4:987b201ec4b1 45 *
filartrix 4:987b201ec4b1 46 * @param[in] t A pointer to the timer
filartrix 4:987b201ec4b1 47 * @param[in] interval The interval before the timer expires.
filartrix 4:987b201ec4b1 48 *
filartrix 4:987b201ec4b1 49 */
filartrix 4:987b201ec4b1 50 void
filartrix 4:987b201ec4b1 51 Timer_Set(struct timer *t, tClockTime interval)
filartrix 4:987b201ec4b1 52 {
filartrix 4:987b201ec4b1 53 t->interval = interval;
filartrix 4:987b201ec4b1 54 t->start = Clock_Time();
filartrix 4:987b201ec4b1 55 }
filartrix 4:987b201ec4b1 56 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 57 /**
filartrix 4:987b201ec4b1 58 * Reset the timer with the same interval.
filartrix 4:987b201ec4b1 59 *
filartrix 4:987b201ec4b1 60 * This function resets the timer with the same interval that was
filartrix 4:987b201ec4b1 61 * given to the timer_set() function. The start point of the interval
filartrix 4:987b201ec4b1 62 * is the exact time that the timer last expired. Therefore, this
filartrix 4:987b201ec4b1 63 * function will cause the timer to be stable over time, unlike the
filartrix 4:987b201ec4b1 64 * timer_restart() function.
filartrix 4:987b201ec4b1 65 *
filartrix 4:987b201ec4b1 66 * \param t A pointer to the timer.
filartrix 4:987b201ec4b1 67 *
filartrix 4:987b201ec4b1 68 * \sa timer_restart()
filartrix 4:987b201ec4b1 69 */
filartrix 4:987b201ec4b1 70 void
filartrix 4:987b201ec4b1 71 Timer_Reset(struct timer *t)
filartrix 4:987b201ec4b1 72 {
filartrix 4:987b201ec4b1 73 t->start += t->interval;
filartrix 4:987b201ec4b1 74 }
filartrix 4:987b201ec4b1 75 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 76 /**
filartrix 4:987b201ec4b1 77 * Restart the timer from the current point in time
filartrix 4:987b201ec4b1 78 *
filartrix 4:987b201ec4b1 79 * This function restarts a timer with the same interval that was
filartrix 4:987b201ec4b1 80 * given to the timer_set() function. The timer will start at the
filartrix 4:987b201ec4b1 81 * current time.
filartrix 4:987b201ec4b1 82 *
filartrix 4:987b201ec4b1 83 * \note A periodic timer will drift if this function is used to reset
filartrix 4:987b201ec4b1 84 * it. For preioric timers, use the timer_reset() function instead.
filartrix 4:987b201ec4b1 85 *
filartrix 4:987b201ec4b1 86 * \param t A pointer to the timer.
filartrix 4:987b201ec4b1 87 *
filartrix 4:987b201ec4b1 88 * \sa timer_reset()
filartrix 4:987b201ec4b1 89 */
filartrix 4:987b201ec4b1 90 void
filartrix 4:987b201ec4b1 91 Timer_Restart(struct timer *t)
filartrix 4:987b201ec4b1 92 {
filartrix 4:987b201ec4b1 93 t->start = Clock_Time();
filartrix 4:987b201ec4b1 94 }
filartrix 4:987b201ec4b1 95 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 96 /**
filartrix 4:987b201ec4b1 97 * Check if a timer has expired.
filartrix 4:987b201ec4b1 98 *
filartrix 4:987b201ec4b1 99 * This function tests if a timer has expired and returns true or
filartrix 4:987b201ec4b1 100 * false depending on its status.
filartrix 4:987b201ec4b1 101 *
filartrix 4:987b201ec4b1 102 * \param t A pointer to the timer
filartrix 4:987b201ec4b1 103 *
filartrix 4:987b201ec4b1 104 * \return Non-zero if the timer has expired, zero otherwise.
filartrix 4:987b201ec4b1 105 *
filartrix 4:987b201ec4b1 106 */
filartrix 4:987b201ec4b1 107 int
filartrix 4:987b201ec4b1 108 Timer_Expired(struct timer *t)
filartrix 4:987b201ec4b1 109 {
filartrix 4:987b201ec4b1 110 /* Note: Can not return diff >= t->interval so we add 1 to diff and return
filartrix 4:987b201ec4b1 111 t->interval < diff - required to avoid an internal error in mspgcc. */
filartrix 4:987b201ec4b1 112 tClockTime diff = (Clock_Time() - t->start) + 1;
filartrix 4:987b201ec4b1 113 return t->interval < diff;
filartrix 4:987b201ec4b1 114
filartrix 4:987b201ec4b1 115 }
filartrix 4:987b201ec4b1 116 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 117 /**
filartrix 4:987b201ec4b1 118 * The time until the timer expires
filartrix 4:987b201ec4b1 119 *
filartrix 4:987b201ec4b1 120 * This function returns the time until the timer expires.
filartrix 4:987b201ec4b1 121 *
filartrix 4:987b201ec4b1 122 * \param t A pointer to the timer
filartrix 4:987b201ec4b1 123 *
filartrix 4:987b201ec4b1 124 * \return The time until the timer expires
filartrix 4:987b201ec4b1 125 *
filartrix 4:987b201ec4b1 126 */
filartrix 4:987b201ec4b1 127 tClockTime
filartrix 4:987b201ec4b1 128 Timer_Remaining(struct timer *t)
filartrix 4:987b201ec4b1 129 {
filartrix 4:987b201ec4b1 130 return t->start + t->interval - Clock_Time();
filartrix 4:987b201ec4b1 131 }
filartrix 4:987b201ec4b1 132 /*---------------------------------------------------------------------------*/
filartrix 4:987b201ec4b1 133
filartrix 4:987b201ec4b1 134 /** @} */
filartrix 4:987b201ec4b1 135
filartrix 4:987b201ec4b1 136
filartrix 4:987b201ec4b1 137