Add POSIX timer emulator.
[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.1  2005/11/27 03:58:18  bernie
18  *#* Add POSIX timer emulator.
19  *#*
20  *#* Revision 1.1  2005/11/27 03:06:36  bernie
21  *#* Qt timer emulation.
22  *#*
23  *#*/
24
25 #include <cfg/compiler.h> // hptime.t
26 #include <os/hptime.h>
27
28 #include <signal.h>       // sigaction()
29 #include <sys/time.h>     // setitimer()
30 #include <string.h>       // memset()
31
32
33 // Forward declaration for the user interrupt server routine.
34 void timer_isr(int);
35
36 /// HW dependent timer initialization.
37 extern "C" static void timer_hw_init(void)
38 {
39         struct sigaction sa;
40         memset(&sa, 0, sizeof(sa));
41
42         // Setup interrupt callback
43         sa.sa_handler = timer_isr;
44         sigemptyset(&sa.sa_mask);
45         sigaddset(&sa.sa_mask, SIGALRM);
46         sa.sa_flags = SA_RESTART;
47         sigaction(SIGALRM, &sa, NULL);
48
49         // Setup POSIX realtime timer to interrupt every 10ms.
50         static struct itimerval itv =
51         {
52                 { 0, 1000 }, /* it_interval */
53                 { 0, 1000 }  /* it_value */
54         };
55         setitimer(ITIMER_REAL, &itv, NULL);
56 }
57
58 extern "C" INLINE hptime_t timer_hw_hpread(void)
59 {
60         return hptime_get();
61 }
62