Make header C++ friendly.
[bertos.git] / drv / timer_posix.c
1 /*!
2  * \file
3  * <!--
4  * Copyright 2005 Develer S.r.l. (http://www.develer.com/)
5  * This file is part of DevLib - See README.devlib for information.
6  * -->
7  *
8  * \version $Id$
9  *
10  * \author Bernardo Innocenti <bernie@develer.com>
11  *
12  * \brief Low-level timer module for Qt emulator (implementation).
13  */
14
15 /*#*
16  *#* $Log$
17  *#* Revision 1.2  2006/01/16 03:30:21  bernie
18  *#* Make header C++ friendly.
19  *#*
20  *#* Revision 1.1  2005/11/27 03:58:18  bernie
21  *#* Add POSIX timer emulator.
22  *#*
23  *#* Revision 1.1  2005/11/27 03:06:36  bernie
24  *#* Qt timer emulation.
25  *#*
26  *#*/
27
28 #include <cfg/compiler.h> // hptime.t
29 #include <os/hptime.h>
30
31 #include <signal.h>       // sigaction()
32 #include <sys/time.h>     // setitimer()
33 #include <string.h>       // memset()
34
35
36 // Forward declaration for the user interrupt server routine.
37 void timer_isr(int);
38
39 /// HW dependent timer initialization.
40 EXTERN_C static void timer_hw_init(void)
41 {
42         struct sigaction sa;
43         memset(&sa, 0, sizeof(sa));
44
45         // Setup interrupt callback
46         sa.sa_handler = timer_isr;
47         sigemptyset(&sa.sa_mask);
48         sigaddset(&sa.sa_mask, SIGALRM);
49         sa.sa_flags = SA_RESTART;
50         sigaction(SIGALRM, &sa, NULL);
51
52         // Setup POSIX realtime timer to interrupt every 10ms.
53         static struct itimerval itv =
54         {
55                 { 0, 1000 }, /* it_interval */
56                 { 0, 1000 }  /* it_value */
57         };
58         setitimer(ITIMER_REAL, &itv, NULL);
59 }
60
61 INLINE hptime_t timer_hw_hpread(void)
62 {
63         return hptime_get();
64 }
65