[ac7d5ef0] | 1 | /* Task_1 |
---|
| 2 | * |
---|
| 3 | * This routine serves as a test task. It verifies the event maager. |
---|
| 4 | * |
---|
| 5 | * Input parameters: |
---|
| 6 | * argument - task argument |
---|
| 7 | * |
---|
| 8 | * Output parameters: NONE |
---|
| 9 | * |
---|
[08311cc3] | 10 | * COPYRIGHT (c) 1989-1999. |
---|
[ac7d5ef0] | 11 | * On-Line Applications Research Corporation (OAR). |
---|
| 12 | * |
---|
[98e4ebf5] | 13 | * The license and distribution terms for this file may be |
---|
| 14 | * found in the file LICENSE in this distribution or at |
---|
[d2b93bfd] | 15 | * http://www.rtems.com/license/LICENSE. |
---|
[ac7d5ef0] | 16 | * |
---|
| 17 | * $Id$ |
---|
| 18 | */ |
---|
| 19 | |
---|
| 20 | #include "system.h" |
---|
| 21 | |
---|
| 22 | rtems_task Task_1( |
---|
| 23 | rtems_task_argument argument |
---|
| 24 | ) |
---|
| 25 | { |
---|
| 26 | rtems_event_set eventout; |
---|
| 27 | rtems_time_of_day time; |
---|
| 28 | rtems_status_code status; |
---|
[c87608f] | 29 | uint32_t index; |
---|
[ac7d5ef0] | 30 | |
---|
| 31 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_16 to TA2" ); |
---|
| 32 | status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_16 ); |
---|
| 33 | directive_failed( status, "rtems_event_send" ); |
---|
| 34 | |
---|
| 35 | puts( |
---|
| 36 | "TA1 - rtems_event_receive - waiting forever on " |
---|
| 37 | "RTEMS_EVENT_14 and RTEMS_EVENT_15" |
---|
| 38 | ); |
---|
| 39 | status = rtems_event_receive( |
---|
| 40 | RTEMS_EVENT_14 | RTEMS_EVENT_15, |
---|
| 41 | RTEMS_DEFAULT_OPTIONS, |
---|
| 42 | RTEMS_NO_TIMEOUT, |
---|
| 43 | &eventout |
---|
| 44 | ); |
---|
| 45 | directive_failed( status, "rtems_event_receive" ); |
---|
| 46 | printf( |
---|
| 47 | "TA1 - RTEMS_EVENT_14 and RTEMS_EVENT_15 received - eventout => %08x\n", |
---|
| 48 | eventout |
---|
| 49 | ); |
---|
| 50 | |
---|
| 51 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to TA2" ); |
---|
| 52 | status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_18 ); |
---|
| 53 | directive_failed( status, "rtems_event_send" ); |
---|
| 54 | |
---|
| 55 | puts( |
---|
| 56 | "TA1 - rtems_event_receive - waiting with 10 second timeout on RTEMS_EVENT_14" |
---|
| 57 | ); |
---|
| 58 | status = rtems_event_receive( |
---|
| 59 | RTEMS_EVENT_14, |
---|
| 60 | RTEMS_DEFAULT_OPTIONS, |
---|
| 61 | 10 * TICKS_PER_SECOND, |
---|
| 62 | &eventout |
---|
| 63 | ); |
---|
| 64 | directive_failed( status, "rtems_event_receive" ); |
---|
| 65 | printf( "TA1 - RTEMS_EVENT_14 received - eventout => %08x\n", eventout ); |
---|
| 66 | |
---|
| 67 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_19 to TA2" ); |
---|
| 68 | status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_19 ); |
---|
| 69 | directive_failed( status, "rtems_event_send" ); |
---|
| 70 | |
---|
| 71 | status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); |
---|
| 72 | directive_failed( status, "rtems_clock_get" ); |
---|
| 73 | print_time( "TA1 - rtems_clock_get - ", &time, "\n" ); |
---|
| 74 | |
---|
[ba39113] | 75 | rtems_test_pause(); |
---|
[ac7d5ef0] | 76 | |
---|
| 77 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to self after 5 seconds"); |
---|
| 78 | status = rtems_timer_fire_after( |
---|
| 79 | Timer_id[ 1 ], |
---|
| 80 | 5 * TICKS_PER_SECOND, |
---|
| 81 | TA1_send_18_to_self_5_seconds, |
---|
| 82 | NULL |
---|
| 83 | ); |
---|
| 84 | directive_failed( status, "rtems_timer_fire_after 5 seconds" ); |
---|
| 85 | |
---|
| 86 | puts( "TA1 - rtems_event_receive - waiting forever on RTEMS_EVENT_18" ); |
---|
| 87 | status = rtems_event_receive( |
---|
| 88 | RTEMS_EVENT_18, |
---|
| 89 | RTEMS_DEFAULT_OPTIONS, |
---|
| 90 | RTEMS_NO_TIMEOUT, |
---|
| 91 | &eventout |
---|
| 92 | ); |
---|
| 93 | directive_failed( status, "rtems_event_receive of 18" ); |
---|
| 94 | printf( "TA1 - RTEMS_EVENT_18 received - eventout => %08x\n", eventout ); |
---|
| 95 | |
---|
| 96 | status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); |
---|
| 97 | directive_failed( status, "TA1 rtems_clock_get" ); |
---|
| 98 | print_time( "TA1 - rtems_clock_get - ", &time, "\n" ); |
---|
| 99 | |
---|
| 100 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_3 to self" ); |
---|
| 101 | status = rtems_event_send( RTEMS_SELF, RTEMS_EVENT_3 ); |
---|
| 102 | directive_failed( status, "rtems_event_send" ); |
---|
| 103 | |
---|
| 104 | puts( |
---|
| 105 | "TA1 - rtems_event_receive - RTEMS_EVENT_3 or " |
---|
| 106 | "RTEMS_EVENT_22 - NO_WAIT and ANY" |
---|
| 107 | ); |
---|
| 108 | status = rtems_event_receive( |
---|
| 109 | RTEMS_EVENT_3 | RTEMS_EVENT_22, |
---|
| 110 | RTEMS_NO_WAIT | RTEMS_EVENT_ANY, |
---|
| 111 | RTEMS_NO_TIMEOUT, |
---|
| 112 | &eventout |
---|
| 113 | ); |
---|
| 114 | directive_failed( status, "rtems_event_receive of 3 and 22" ); |
---|
| 115 | printf( "TA1 - RTEMS_EVENT_3 received - eventout => %08x\n", eventout ); |
---|
| 116 | |
---|
| 117 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_4 to self" ); |
---|
| 118 | status = rtems_event_send( RTEMS_SELF, RTEMS_EVENT_4 ); |
---|
| 119 | directive_failed( status, "rtems_event_send" ); |
---|
| 120 | |
---|
| 121 | puts ( |
---|
| 122 | "TA1 - rtems_event_receive - RTEMS_EVENT_4 or " |
---|
| 123 | "RTEMS_EVENT_5 - forever and ANY" |
---|
| 124 | ); |
---|
| 125 | status = rtems_event_receive( |
---|
| 126 | RTEMS_EVENT_4 | RTEMS_EVENT_5, |
---|
| 127 | RTEMS_EVENT_ANY, |
---|
| 128 | RTEMS_NO_TIMEOUT, |
---|
| 129 | &eventout |
---|
| 130 | ); |
---|
| 131 | directive_failed( status, "rtems_event_receive" ); |
---|
| 132 | printf( "TA1 - RTEMS_EVENT_4 received - eventout => %08x\n", eventout ); |
---|
| 133 | |
---|
[ba39113] | 134 | rtems_test_pause(); |
---|
[ac7d5ef0] | 135 | |
---|
| 136 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to self after 5 seconds"); |
---|
| 137 | status = rtems_timer_fire_after( |
---|
| 138 | Timer_id[ 1 ], |
---|
| 139 | 5 * TICKS_PER_SECOND, |
---|
| 140 | TA1_send_18_to_self_5_seconds, |
---|
| 141 | NULL |
---|
| 142 | ); |
---|
| 143 | directive_failed( status, "rtems_timer_fire_after 5 seconds" ); |
---|
| 144 | |
---|
| 145 | puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_18"); |
---|
| 146 | status = rtems_timer_cancel( Timer_id[ 1 ] ); |
---|
| 147 | directive_failed( status, "rtems_timer_cancel" ); |
---|
| 148 | |
---|
| 149 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_8 to self after 60 seconds"); |
---|
| 150 | status = rtems_timer_fire_after( |
---|
| 151 | Timer_id[ 1 ], |
---|
| 152 | 60 * TICKS_PER_SECOND, |
---|
| 153 | TA1_send_8_to_self_60_seconds, |
---|
| 154 | NULL |
---|
| 155 | ); |
---|
| 156 | directive_failed( status, "rtems_timer_fire_after 60 seconds" ); |
---|
| 157 | |
---|
| 158 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_9 to self after 60 seconds"); |
---|
| 159 | status = rtems_timer_fire_after( |
---|
| 160 | Timer_id[ 2 ], |
---|
| 161 | 60 * TICKS_PER_SECOND, |
---|
| 162 | TA1_send_9_to_self_60_seconds, |
---|
| 163 | NULL |
---|
| 164 | ); |
---|
| 165 | directive_failed( status, "rtems_timer_fire_after 60 seconds" ); |
---|
| 166 | |
---|
| 167 | puts( |
---|
| 168 | "TA1 - rtems_event_send - send RTEMS_EVENT_10 to self after 60 seconds" |
---|
| 169 | ); |
---|
| 170 | status = rtems_timer_fire_after( |
---|
| 171 | Timer_id[ 3 ], |
---|
| 172 | 60 * TICKS_PER_SECOND, |
---|
| 173 | TA1_send_10_to_self, |
---|
| 174 | NULL |
---|
| 175 | ); |
---|
| 176 | directive_failed( status, "rtems_timer_fire_after 60 seconds" ); |
---|
| 177 | |
---|
| 178 | puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_8" ); |
---|
| 179 | status = rtems_timer_cancel( Timer_id[ 1 ] ); |
---|
| 180 | directive_failed( status, "rtems_timer_cancel" ); |
---|
| 181 | |
---|
| 182 | build_time( &time, 2, 12, 1988, 8, 15, 0, 0 ); |
---|
| 183 | |
---|
| 184 | print_time( "TA1 - rtems_clock_set - ", &time, "\n" ); |
---|
| 185 | status = rtems_clock_set( &time ); |
---|
| 186 | directive_failed( status, "rtems_clock_set" ); |
---|
| 187 | |
---|
| 188 | puts( "TA1 - rtems_event_send - send RTEMS_EVENT_1 every second" ); |
---|
| 189 | status = rtems_timer_fire_after( |
---|
| 190 | Timer_id[ 1 ], |
---|
| 191 | TICKS_PER_SECOND, |
---|
| 192 | TA1_send_1_to_self_every_second, |
---|
| 193 | NULL |
---|
| 194 | ); |
---|
| 195 | directive_failed( status, "rtems_timer_fire_after 1 second" ); |
---|
| 196 | |
---|
| 197 | for ( index = 0; index < 3; index++ ) { |
---|
| 198 | |
---|
| 199 | status = rtems_event_receive( |
---|
| 200 | RTEMS_EVENT_1, |
---|
| 201 | RTEMS_EVENT_ANY, |
---|
| 202 | RTEMS_NO_TIMEOUT, |
---|
| 203 | &eventout |
---|
| 204 | ); |
---|
| 205 | directive_failed( status, "rtems_event_receive" ); |
---|
| 206 | |
---|
| 207 | status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); |
---|
| 208 | directive_failed( status, "rtems_clock_get" ); |
---|
| 209 | |
---|
| 210 | printf( "TA1 - RTEMS_EVENT_1 received - eventout => %08x - ", eventout ); |
---|
| 211 | print_time( "at ", &time, "\n" ); |
---|
| 212 | |
---|
| 213 | if ( index < 2 ) { |
---|
| 214 | status = rtems_timer_reset( Timer_id[ 1 ] ); |
---|
| 215 | directive_failed( status, "rtems_timer_reset" ); |
---|
| 216 | }; |
---|
| 217 | |
---|
| 218 | } |
---|
| 219 | |
---|
| 220 | puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_1" ); |
---|
| 221 | status = rtems_timer_cancel( Timer_id[ 1 ] ); |
---|
| 222 | directive_failed( status, "rtems_timer_cancel" ); |
---|
| 223 | |
---|
[ba39113] | 224 | rtems_test_pause(); |
---|
[ac7d5ef0] | 225 | |
---|
| 226 | time.day = 13; |
---|
| 227 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 1 day" ); |
---|
| 228 | status = rtems_timer_fire_when( |
---|
| 229 | Timer_id[ 1 ], |
---|
| 230 | &time, |
---|
| 231 | TA1_send_11_to_self, |
---|
| 232 | NULL |
---|
| 233 | ); |
---|
| 234 | directive_failed( status, "rtems_timer_fire_when 1 day" ); |
---|
| 235 | |
---|
| 236 | time.hour = 7; |
---|
| 237 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 1 day" ); |
---|
| 238 | status = rtems_timer_fire_when( |
---|
| 239 | Timer_id[ 2 ], |
---|
| 240 | &time, |
---|
| 241 | TA1_send_11_to_self, |
---|
| 242 | NULL |
---|
| 243 | ); |
---|
| 244 | directive_failed( status, "rtems_timer_fire_when 1 day" ); |
---|
| 245 | |
---|
| 246 | time.hour = 8; /* so code below has correct time/date */ |
---|
| 247 | time.day = 14; |
---|
| 248 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 2 days" ); |
---|
| 249 | status = rtems_timer_fire_when( |
---|
| 250 | Timer_id[ 3 ], |
---|
| 251 | &time, |
---|
| 252 | TA1_send_11_to_self, |
---|
| 253 | NULL |
---|
| 254 | ); |
---|
| 255 | directive_failed( status, "rtems_timer_fire_when 2 days" ); |
---|
| 256 | |
---|
| 257 | puts("TA1 - rtems_timer_cancel - cancelling RTEMS_EVENT_11 to self in 1 day"); |
---|
| 258 | status = rtems_timer_cancel( Timer_id[ 1 ] ); |
---|
| 259 | directive_failed( status, "rtems_timer_cancel" ); |
---|
| 260 | |
---|
| 261 | puts( |
---|
| 262 | "TA1 - rtems_timer_cancel - cancelling RTEMS_EVENT_11 to self in 2 days" |
---|
| 263 | ); |
---|
| 264 | status = rtems_timer_cancel( Timer_id[ 3 ] ); |
---|
| 265 | directive_failed( status, "rtems_timer_cancel" ); |
---|
| 266 | |
---|
| 267 | puts( |
---|
| 268 | "TA1 - rtems_event_send - resending RTEMS_EVENT_11 to self in 2 days" |
---|
| 269 | ); |
---|
| 270 | status = rtems_timer_fire_when( |
---|
| 271 | Timer_id[ 3 ], |
---|
| 272 | &time, |
---|
| 273 | TA1_send_11_to_self, |
---|
| 274 | NULL |
---|
| 275 | ); |
---|
| 276 | directive_failed( status, "rtems_timer_fire_when 2 days" ); |
---|
| 277 | |
---|
| 278 | time.day = 15; |
---|
| 279 | print_time( "TA1 - rtems_clock_set - ", &time, "\n" ); |
---|
| 280 | status = rtems_clock_set( &time ); |
---|
| 281 | directive_failed( status, "TA1 rtems_clock_set" ); |
---|
| 282 | |
---|
| 283 | puts( "TA1 - rtems_event_receive - waiting forever on RTEMS_EVENT_11" ); |
---|
| 284 | status = rtems_event_receive( |
---|
| 285 | RTEMS_EVENT_11, |
---|
| 286 | RTEMS_DEFAULT_OPTIONS, |
---|
| 287 | RTEMS_NO_TIMEOUT, |
---|
| 288 | &eventout |
---|
| 289 | ); |
---|
| 290 | directive_failed( status, "rtems_event_receive" ); |
---|
| 291 | printf( "TA1 - RTEMS_EVENT_11 received - eventout => %08x\n", eventout ); |
---|
| 292 | |
---|
[ba39113] | 293 | rtems_test_pause(); |
---|
[ac7d5ef0] | 294 | |
---|
| 295 | puts( "TA1 - rtems_event_send/rtems_event_receive combination" ); |
---|
| 296 | status = rtems_timer_fire_after( |
---|
| 297 | Timer_id[ 1 ], |
---|
| 298 | 10, |
---|
| 299 | TA1_send_11_to_self, |
---|
| 300 | NULL |
---|
| 301 | ); |
---|
| 302 | directive_failed( status, "rtems_timer_fire_after 10 ticks" ); |
---|
| 303 | |
---|
| 304 | status = rtems_event_receive( |
---|
| 305 | RTEMS_EVENT_11, |
---|
| 306 | RTEMS_DEFAULT_OPTIONS, |
---|
| 307 | RTEMS_NO_TIMEOUT, |
---|
| 308 | &eventout |
---|
| 309 | ); |
---|
| 310 | directive_failed( status, "rtems_event_receive" ); |
---|
| 311 | |
---|
| 312 | build_time( &time, 2, 12, 1988, 8, 15, 0, 0 ); |
---|
| 313 | |
---|
| 314 | print_time( "TA1 - rtems_clock_set - ", &time, "\n" ); |
---|
| 315 | status = rtems_clock_set( &time ); |
---|
| 316 | directive_failed( status, "rtems_clock_set" ); |
---|
| 317 | |
---|
| 318 | time.day = 13; |
---|
| 319 | puts( "TA1 - rtems_event_receive all outstanding events" ); |
---|
| 320 | status = rtems_event_receive( |
---|
| 321 | RTEMS_ALL_EVENTS, |
---|
| 322 | RTEMS_NO_WAIT | RTEMS_EVENT_ANY, |
---|
| 323 | 0, |
---|
| 324 | &eventout |
---|
| 325 | ); |
---|
| 326 | fatal_directive_status( |
---|
| 327 | status, |
---|
| 328 | RTEMS_UNSATISFIED, |
---|
| 329 | "rtems_event_receive all events" |
---|
| 330 | ); |
---|
| 331 | |
---|
| 332 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_10 to self in 1 day" ); |
---|
| 333 | status = rtems_timer_fire_when( |
---|
| 334 | Timer_id[ 1 ], |
---|
| 335 | &time, |
---|
| 336 | TA1_send_10_to_self, |
---|
| 337 | NULL |
---|
| 338 | ); |
---|
| 339 | directive_failed( status, "rtems_timer_fire_when 1 day" ); |
---|
| 340 | |
---|
| 341 | time.day = 14; |
---|
| 342 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 2 days" ); |
---|
| 343 | status = rtems_timer_fire_when( |
---|
| 344 | Timer_id[ 2 ], |
---|
| 345 | &time, |
---|
| 346 | TA1_send_11_to_self, |
---|
| 347 | NULL |
---|
| 348 | ); |
---|
| 349 | directive_failed( status, "rtems_timer_fire_when 2 days" ); |
---|
| 350 | |
---|
| 351 | build_time( &time, 2, 12, 1988, 7, 15, 0, 0 ); |
---|
| 352 | |
---|
| 353 | print_time( "TA1 - rtems_clock_set - ", &time, "\n" ); |
---|
| 354 | puts( "TA1 - set time backwards" ); |
---|
| 355 | status = rtems_clock_set( &time ); |
---|
| 356 | directive_failed( status, "rtems_clock_set" ); |
---|
| 357 | |
---|
| 358 | status = rtems_event_receive( |
---|
| 359 | RTEMS_ALL_EVENTS, |
---|
| 360 | RTEMS_NO_WAIT | RTEMS_EVENT_ANY, |
---|
| 361 | RTEMS_NO_TIMEOUT, |
---|
| 362 | &eventout |
---|
| 363 | ); |
---|
| 364 | if ( eventout ) printf( "ERROR -0x%08x events received\n", eventout ); |
---|
| 365 | else puts( "TA1 - no events received" ); |
---|
| 366 | fatal_directive_status( |
---|
| 367 | status, |
---|
| 368 | RTEMS_UNSATISFIED, |
---|
| 369 | "rtems_event_receive all events" |
---|
| 370 | ); |
---|
| 371 | |
---|
| 372 | build_time( &time, 2, 14, 1988, 7, 15, 0, 0 ); |
---|
| 373 | |
---|
| 374 | print_time( "TA1 - rtems_clock_set - ", &time, "\n" ); |
---|
| 375 | puts( "TA1 - set time forwards (leave a timer)" ); |
---|
| 376 | status = rtems_clock_set( &time ); |
---|
| 377 | directive_failed( status, "rtems_clock_set" ); |
---|
| 378 | |
---|
| 379 | status = rtems_event_receive( |
---|
| 380 | RTEMS_ALL_EVENTS, |
---|
| 381 | RTEMS_NO_WAIT | RTEMS_EVENT_ANY, |
---|
| 382 | RTEMS_NO_TIMEOUT, |
---|
| 383 | &eventout |
---|
| 384 | ); |
---|
| 385 | if ( eventout == RTEMS_EVENT_10 ) puts( "TA1 - RTEMS_EVENT_10 received" ); |
---|
| 386 | else printf( "ERROR -0x%08x events received\n", eventout ); |
---|
| 387 | directive_failed( status, "rtems_event_receive all events" ); |
---|
| 388 | |
---|
| 389 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 100 ticks"); |
---|
| 390 | status = rtems_timer_fire_after( |
---|
| 391 | Timer_id[ 1 ], |
---|
| 392 | 100, |
---|
| 393 | TA1_send_11_to_self, |
---|
| 394 | NULL |
---|
| 395 | ); |
---|
| 396 | directive_failed( status, "rtems_timer_fire_after 100 ticks" ); |
---|
| 397 | |
---|
| 398 | puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 200 ticks"); |
---|
| 399 | status = rtems_timer_fire_after( |
---|
| 400 | Timer_id[ 1 ], |
---|
| 401 | 200, |
---|
| 402 | TA1_send_11_to_self, |
---|
| 403 | NULL |
---|
| 404 | ); |
---|
| 405 | directive_failed( status, "rtems_timer_fire_after 200 ticks" ); |
---|
| 406 | |
---|
| 407 | puts( "*** END OF TEST 11 ***" ); |
---|
[3aa4c2e0] | 408 | rtems_test_exit( 0 ); |
---|
[ac7d5ef0] | 409 | } |
---|