HW layer for the Nucleo board, it only work with old BLE_API

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
leonardoaraujosantos
Date:
Tue Nov 03 23:10:27 2015 +0000
Revision:
129:57997390c086
Parent:
70:d20d30f59b1c
Changing pin D13

Who changed what in which revision?

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