ble

Dependencies:   HC_SR04_Ultrasonic_Library Servo mbed

Fork of FIP_REV1 by Robotique FIP

Committer:
julientiron
Date:
Thu Jul 09 13:33:36 2015 +0000
Revision:
4:69a35a56ac48
Parent:
0:3d641e170a74
BLE

Who changed what in which revision?

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