1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
*
* This is a simple real-time applications which contains 3 periodic tasks.
*
* Task A is an independent task.
*
* Task B and C share a data.
*
* Tasks are implemented as POSIX threads.
*
* The share data is protected with a POSIX mutex.
*
* Other POSIX facilities such as timers, condition, .. is also used
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#define CONFIGURE_INIT
#include "system.h"
#include "tmacros.h"
#include <signal.h> /* signal facilities */
#include <unistd.h> /* sleep facilities */
#include <time.h> /* time facilities */
#include <stdio.h> /* console facilities */
void *POSIX_Init (
void *argument
)
{
struct sigevent event;
int status;
timer_t timer;
timer_t timer1;
struct itimerspec itimer;
/*
* If these are not filled in correctly, we don't pass its error checking.
*/
event.sigev_notify = SIGEV_SIGNAL;
event.sigev_signo = SIGUSR1;
puts( "\n\n*** POSIX Timers Test 02 ***" );
puts( "timer_create - bad clock id - EINVAL" );
status = timer_create( -1, &event, &timer );
fatal_posix_service_status_errno( status, EINVAL, "bad clock id" );
puts( "timer_create - bad timer id pointer - EINVAL" );
status = timer_create( CLOCK_REALTIME, &event, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad timer id" );
puts( "timer_create - OK" );
status = timer_create( CLOCK_REALTIME, NULL, &timer );
posix_service_failed( status, "timer_create OK" );
puts( "timer_create - too many - EAGAIN" );
status = timer_create( CLOCK_REALTIME, NULL, &timer1 );
fatal_posix_service_status_errno( status, EAGAIN, "too many" );
puts( "timer_delete - bad id - EINVAL" );
status = timer_delete( timer1 + 1 );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
puts( "timer_getoverrun - bad id - EINVAL" );
status = timer_getoverrun( timer1 + 1 );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
puts( "timer_gettime - bad itimer - EINVAL" );
status = timer_gettime( timer1, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
puts( "timer_gettime - bad id - EINVAL" );
status = timer_gettime( timer1 + 1, &itimer );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
puts( "timer_settime - bad itimer pointer - EINVAL" );
status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad itimer pointer" );
itimer.it_value.tv_nsec = 2000000000;
puts( "timer_settime - bad itimer value - too many nanosecond - EINVAL" );
status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #1" );
itimer.it_value.tv_nsec = -1;
puts( "timer_settime - bad itimer value - negative nanosecond - EINVAL" );
status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #2" );
itimer.it_value = _TOD_Now;
itimer.it_value.tv_sec = itimer.it_value.tv_sec - 1;
puts( "timer_settime - bad itimer value - previous time - EINVAL" );
status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #3" );
itimer.it_value.tv_nsec = 0;
puts( "timer_settime - bad clock value - EINVAL" );
status = timer_settime( timer, 0x80, &itimer, NULL );
fatal_posix_service_status_errno( status, EINVAL, "bad clock value" );
puts( "timer_delete - OK" );
status = timer_delete( timer );
posix_service_failed( status, "timer_delete OK" );
puts( "timer_delete - bad id - EINVAL" );
status = timer_delete( timer );
fatal_posix_service_status_errno( status, EINVAL, "bad id" );
puts( "*** END OF POSIX Timers Test 02 ***" );
rtems_test_exit (0);
}
|