untested protothread timer stuff
This commit is contained in:
		
							parent
							
								
									427eb62ac4
								
							
						
					
					
						commit
						0de9d4db1e
					
				
					 7 changed files with 376 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -9,7 +9,7 @@ MCU = atmega168
 | 
			
		|||
F_CPU = 16000000
 | 
			
		||||
FORMAT = ihex
 | 
			
		||||
TARGET = example
 | 
			
		||||
SRC = example.c
 | 
			
		||||
SRC = example.c timer/clock-arch.c timer/timer.c
 | 
			
		||||
ASRC = 
 | 
			
		||||
OPT = s
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ CSTANDARD = -std=gnu99
 | 
			
		|||
CDEFS = -DF_CPU=$(F_CPU)UL
 | 
			
		||||
 | 
			
		||||
# Place -I options here
 | 
			
		||||
CINCS = -Ipt
 | 
			
		||||
CINCS = -Ipt 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CDEBUG = -g$(DEBUG)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,10 +2,15 @@
 | 
			
		|||
#include "util/delay.h"
 | 
			
		||||
 | 
			
		||||
#include "pt.h"
 | 
			
		||||
#include "timer/clock.h"
 | 
			
		||||
#include "timer/timer.h"
 | 
			
		||||
 | 
			
		||||
/* Two flags that the two protothread functions use. */
 | 
			
		||||
static int protothread1_flag, protothread2_flag;
 | 
			
		||||
 | 
			
		||||
/* Two timers for the two protothreads. */
 | 
			
		||||
static struct timer timer1, timer2;
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
protothread1(struct pt *pt)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -19,10 +24,11 @@ protothread1(struct pt *pt)
 | 
			
		|||
    PT_WAIT_UNTIL(pt, protothread2_flag != 0);
 | 
			
		||||
 | 
			
		||||
    PORTB |= _BV(PB3);
 | 
			
		||||
    _delay_ms(200);
 | 
			
		||||
    timer_set(&timer1, CLOCK_SECOND/2);
 | 
			
		||||
    PT_WAIT_UNTIL(pt, timer_expired(&timer1));
 | 
			
		||||
    PORTB &= ~_BV(PB3);
 | 
			
		||||
    _delay_ms(200);
 | 
			
		||||
 | 
			
		||||
    timer_set(&timer1, CLOCK_SECOND/2);
 | 
			
		||||
    PT_WAIT_UNTIL(pt, timer_expired(&timer1));
 | 
			
		||||
 | 
			
		||||
    /* We then reset the other protothread's flag, and set our own
 | 
			
		||||
       flag so that the other protothread can run. */
 | 
			
		||||
| 
						 | 
				
			
			@ -53,9 +59,11 @@ protothread2(struct pt *pt)
 | 
			
		|||
    PT_WAIT_UNTIL(pt, protothread1_flag != 0);
 | 
			
		||||
 | 
			
		||||
    PORTB |= _BV(PB2);
 | 
			
		||||
    _delay_ms(100);
 | 
			
		||||
    timer_set(&timer2, CLOCK_SECOND/2);
 | 
			
		||||
    PT_WAIT_UNTIL(pt, timer_expired(&timer2));
 | 
			
		||||
    PORTB &= ~_BV(PB2);
 | 
			
		||||
    _delay_ms(100);
 | 
			
		||||
    timer_set(&timer2, CLOCK_SECOND/2);
 | 
			
		||||
    PT_WAIT_UNTIL(pt, timer_expired(&timer2));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /* We then reset the other protothread's flag, and set our own
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +87,9 @@ int main(void) {
 | 
			
		|||
  // pin 10 = PB2
 | 
			
		||||
  DDRB |= _BV(PB2);
 | 
			
		||||
 | 
			
		||||
  /* Initialize clock */
 | 
			
		||||
  clock_init();
 | 
			
		||||
 | 
			
		||||
  /* Initialize the protothread state variables with PT_INIT(). */
 | 
			
		||||
  PT_INIT(&pt1);
 | 
			
		||||
  PT_INIT(&pt2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										43
									
								
								projekte/protothreads/timer/clock-arch.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								projekte/protothreads/timer/clock-arch.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
// from avr-uip
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <avr/interrupt.h>
 | 
			
		||||
#include <avr/io.h>
 | 
			
		||||
#include <avr/sfr_defs.h>
 | 
			
		||||
 | 
			
		||||
#include "clock-arch.h"
 | 
			
		||||
 | 
			
		||||
//Counted time
 | 
			
		||||
clock_time_t clock_datetime = 0;
 | 
			
		||||
 | 
			
		||||
//Overflow itnerrupt
 | 
			
		||||
ISR(TIMER0_OVF_vect)
 | 
			
		||||
{
 | 
			
		||||
	clock_datetime += 1;
 | 
			
		||||
	TIFR0 |= (1<<TOV0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Initialise the clock
 | 
			
		||||
void clock_init(){
 | 
			
		||||
	//Activate overflow interrupt for timer0
 | 
			
		||||
	TIMSK0 |= (1<<TOIE0);
 | 
			
		||||
 | 
			
		||||
	//Use prescaler 1024
 | 
			
		||||
	TCCR0B |= ((1<<CS12)|(1<<CS10));
 | 
			
		||||
 | 
			
		||||
	//Activate interrupts
 | 
			
		||||
	sei();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Return time
 | 
			
		||||
clock_time_t clock_time(){
 | 
			
		||||
	clock_time_t time;
 | 
			
		||||
 | 
			
		||||
	cli();
 | 
			
		||||
	time = clock_datetime;
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
	return time;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								projekte/protothreads/timer/clock-arch.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								projekte/protothreads/timer/clock-arch.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
// from avr-uip
 | 
			
		||||
 | 
			
		||||
#ifndef __CLOCK_ARCH_H__
 | 
			
		||||
#define __CLOCK_ARCH_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
typedef uint16_t clock_time_t;
 | 
			
		||||
#define CLOCK_CONF_SECOND		(F_CPU / (1024*255))
 | 
			
		||||
								//Freqency divided prescaler and counter register size
 | 
			
		||||
void clock_init(void);
 | 
			
		||||
clock_time_t clock_time(void);
 | 
			
		||||
 | 
			
		||||
#endif /* __CLOCK_ARCH_H__ */
 | 
			
		||||
							
								
								
									
										88
									
								
								projekte/protothreads/timer/clock.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								projekte/protothreads/timer/clock.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
/**
 | 
			
		||||
 * \defgroup clock Clock interface
 | 
			
		||||
 *
 | 
			
		||||
 * The clock interface is the interface between the \ref timer "timer library"
 | 
			
		||||
 * and the platform specific clock functionality. The clock
 | 
			
		||||
 * interface must be implemented for each platform that uses the \ref
 | 
			
		||||
 * timer "timer library".
 | 
			
		||||
 *
 | 
			
		||||
 * The clock interface does only one this: it measures time. The clock
 | 
			
		||||
 * interface provides a macro, CLOCK_SECOND, which corresponds to one
 | 
			
		||||
 * second of system time.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa \ref timer "Timer library"
 | 
			
		||||
 *
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of the Institute nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of the uIP TCP/IP stack
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Adam Dunkels <adam@sics.se>
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __CLOCK_H__
 | 
			
		||||
#define __CLOCK_H__
 | 
			
		||||
 | 
			
		||||
#include "clock-arch.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize the clock library.
 | 
			
		||||
 *
 | 
			
		||||
 * This function initializes the clock library and should be called
 | 
			
		||||
 * from the main() function of the system.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void clock_init(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the current clock time.
 | 
			
		||||
 *
 | 
			
		||||
 * This function returns the current system clock time.
 | 
			
		||||
 *
 | 
			
		||||
 * \return The current clock time, measured in system ticks.
 | 
			
		||||
 */
 | 
			
		||||
clock_time_t clock_time(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A second, measured in system clock time.
 | 
			
		||||
 *
 | 
			
		||||
 * \hideinitializer
 | 
			
		||||
 */
 | 
			
		||||
#ifdef CLOCK_CONF_SECOND
 | 
			
		||||
#define CLOCK_SECOND CLOCK_CONF_SECOND
 | 
			
		||||
#else
 | 
			
		||||
#define CLOCK_SECOND (clock_time_t)32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CLOCK_H__ */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										127
									
								
								projekte/protothreads/timer/timer.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								projekte/protothreads/timer/timer.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
/**
 | 
			
		||||
 * \addtogroup timer
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \file
 | 
			
		||||
 * Timer library implementation.
 | 
			
		||||
 * \author
 | 
			
		||||
 * Adam Dunkels <adam@sics.se>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of the Institute nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of the uIP TCP/IP stack
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Adam Dunkels <adam@sics.se>
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "timer/clock.h"
 | 
			
		||||
#include "timer/timer.h"
 | 
			
		||||
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
 * Set a timer.
 | 
			
		||||
 *
 | 
			
		||||
 * This function is used to set a timer for a time sometime in the
 | 
			
		||||
 * future. The function timer_expired() will evaluate to true after
 | 
			
		||||
 * the timer has expired.
 | 
			
		||||
 *
 | 
			
		||||
 * \param t A pointer to the timer
 | 
			
		||||
 * \param interval The interval before the timer expires.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
timer_set(struct timer *t, clock_time_t interval)
 | 
			
		||||
{
 | 
			
		||||
  t->interval = interval;
 | 
			
		||||
  t->start = clock_time();
 | 
			
		||||
}
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
 * Reset the timer with the same interval.
 | 
			
		||||
 *
 | 
			
		||||
 * This function resets the timer with the same interval that was
 | 
			
		||||
 * given to the timer_set() function. The start point of the interval
 | 
			
		||||
 * is the exact time that the timer last expired. Therefore, this
 | 
			
		||||
 * function will cause the timer to be stable over time, unlike the
 | 
			
		||||
 * timer_rester() function.
 | 
			
		||||
 *
 | 
			
		||||
 * \param t A pointer to the timer.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa timer_restart()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
timer_reset(struct timer *t)
 | 
			
		||||
{
 | 
			
		||||
  t->start += t->interval;
 | 
			
		||||
}
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
 * Restart the timer from the current point in time
 | 
			
		||||
 *
 | 
			
		||||
 * This function restarts a timer with the same interval that was
 | 
			
		||||
 * given to the timer_set() function. The timer will start at the
 | 
			
		||||
 * current time.
 | 
			
		||||
 *
 | 
			
		||||
 * \note A periodic timer will drift if this function is used to reset
 | 
			
		||||
 * it. For preioric timers, use the timer_reset() function instead.
 | 
			
		||||
 *
 | 
			
		||||
 * \param t A pointer to the timer.
 | 
			
		||||
 *
 | 
			
		||||
 * \sa timer_reset()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
timer_restart(struct timer *t)
 | 
			
		||||
{
 | 
			
		||||
  t->start = clock_time();
 | 
			
		||||
}
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
 * Check if a timer has expired.
 | 
			
		||||
 *
 | 
			
		||||
 * This function tests if a timer has expired and returns true or
 | 
			
		||||
 * false depending on its status.
 | 
			
		||||
 *
 | 
			
		||||
 * \param t A pointer to the timer
 | 
			
		||||
 *
 | 
			
		||||
 * \return Non-zero if the timer has expired, zero otherwise.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
timer_expired(struct timer *t)
 | 
			
		||||
{
 | 
			
		||||
  return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
 | 
			
		||||
}
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										86
									
								
								projekte/protothreads/timer/timer.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								projekte/protothreads/timer/timer.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
/**
 | 
			
		||||
 * \defgroup timer Timer library
 | 
			
		||||
 *
 | 
			
		||||
 * The timer library provides functions for setting, resetting and
 | 
			
		||||
 * restarting timers, and for checking if a timer has expired. An
 | 
			
		||||
 * application must "manually" check if its timers have expired; this
 | 
			
		||||
 * is not done automatically.
 | 
			
		||||
 *
 | 
			
		||||
 * A timer is declared as a \c struct \c timer and all access to the
 | 
			
		||||
 * timer is made by a pointer to the declared timer.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The timer library uses the \ref clock "Clock library" to
 | 
			
		||||
 * measure time. Intervals should be specified in the format used by
 | 
			
		||||
 * the clock library.
 | 
			
		||||
 *
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \file
 | 
			
		||||
 * Timer library header file.
 | 
			
		||||
 * \author
 | 
			
		||||
 * Adam Dunkels <adam@sics.se>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of the Institute nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of the uIP TCP/IP stack
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Adam Dunkels <adam@sics.se>
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __TIMER_H__
 | 
			
		||||
#define __TIMER_H__
 | 
			
		||||
 | 
			
		||||
#include "timer.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A timer.
 | 
			
		||||
 *
 | 
			
		||||
 * This structure is used for declaring a timer. The timer must be set
 | 
			
		||||
 * with timer_set() before it can be used.
 | 
			
		||||
 *
 | 
			
		||||
 * \hideinitializer
 | 
			
		||||
 */
 | 
			
		||||
struct timer {
 | 
			
		||||
  clock_time_t start;
 | 
			
		||||
  clock_time_t interval;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void timer_set(struct timer *t, clock_time_t interval);
 | 
			
		||||
void timer_reset(struct timer *t);
 | 
			
		||||
void timer_restart(struct timer *t);
 | 
			
		||||
int timer_expired(struct timer *t);
 | 
			
		||||
 | 
			
		||||
#endif /* __TIMER_H__ */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
		Reference in a new issue