LoRaWAN-SX1272-Application-24-31-9sec

Dependencies:   X_NUCLEO_IKS01A1 driver_mbed_TH02 LoRaWAN-lib-v1_0_1 SX1272Lib mbed

Fork of LoRaWAN-SX1272-Application-24-31-9sec by Oleh Zvonarov

system/timer.cpp

Committer:
emerette
Date:
2018-01-22
Revision:
8:89039f83e9fc
Parent:
0:6cc76d70e2a1

File content as of revision 8:89039f83e9fc:

/*
 / _____)             _              | |
( (____  _____ ____ _| |_ _____  ____| |__
 \____ \| ___ |    (_   _) ___ |/ ___)  _ \
 _____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
    (C)2013 Semtech

Description: Timer objects and scheduling management

License: Revised BSD License, see LICENSE.TXT file include in the project

Maintainer: Miguel Luis and Gregory Cristian
*/
#include "board.h"

Timer TimeCounter;
Ticker LoadTimeCounter;

volatile uint32_t CurrentTime = 0;

void TimerResetTimeCounter( void )
{
    CurrentTime = CurrentTime + TimeCounter.read_us( );
    TimeCounter.reset( );
    TimeCounter.start( );
}

void TimerTimeCounterInit( void )
{
    TimeCounter.start( );
    LoadTimeCounter.attach( &TimerResetTimeCounter, 10 );
}

TimerTime_t TimerGetCurrentTime( void )
{
    CurrentTime += TimeCounter.read_us( );
    TimeCounter.reset( );
    TimeCounter.start( );
    return ( ( TimerTime_t )CurrentTime );
}

TimerTime_t TimerGetElapsedTime( TimerTime_t savedTime )
{
    CurrentTime += TimeCounter.read_us( );
    TimeCounter.reset( );
    TimeCounter.start( );
    return ( TimerTime_t )( CurrentTime - savedTime );
}

TimerTime_t TimerGetFutureTime( TimerTime_t eventInFuture )
{
    CurrentTime += TimeCounter.read_us( );
    TimeCounter.reset( );
    TimeCounter.start( );
    return ( TimerTime_t )( CurrentTime + eventInFuture );
}

void TimerInit( TimerEvent_t *obj, void ( *callback )( void ) )
{
    obj->value = 0;
    obj->Callback = callback;
}

void TimerStart( TimerEvent_t *obj )
{
    obj->Timer.attach_us( obj->Callback, obj->value );
}

void TimerStop( TimerEvent_t *obj )
{
    obj->Timer.detach( );
}

void TimerSetValue( TimerEvent_t *obj, uint32_t value )
{
    obj->value = value;
}