Back to home page

LXR

 
 

    


Warning, /testsuites/ada/sptests/sp11/sptest.adb is written in an unsupported language. File is not indexed.

0001 -- SPDX-License-Identifier: BSD-2-Clause
0002 
0003 --
0004 --  SPTEST / BODY
0005 --
0006 --  DESCRIPTION:
0007 --
0008 --  This package is the implementation of Test 11 of the RTEMS
0009 --  Single Processor Test Suite.
0010 --
0011 --  DEPENDENCIES: 
0012 --
0013 --  
0014 --
0015 --  COPYRIGHT (c) 1989-2011.
0016 --  On-Line Applications Research Corporation (OAR).
0017 --
0018 --  Redistribution and use in source and binary forms, with or without
0019 --  modification, are permitted provided that the following conditions
0020 --  are met:
0021 --  1. Redistributions of source code must retain the above copyright
0022 --     notice, this list of conditions and the following disclaimer.
0023 --  2. Redistributions in binary form must reproduce the above copyright
0024 --     notice, this list of conditions and the following disclaimer in the
0025 --     documentation and/or other materials provided with the distribution.
0026 --
0027 --  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0028 --  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0029 --  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0030 --  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0031 --  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0032 --  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0033 --  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0034 --  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0035 --  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0036 --  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0037 --  POSSIBILITY OF SUCH DAMAGE.
0038 --
0039 
0040 with INTERFACES; use INTERFACES;
0041 with TEST_SUPPORT;
0042 with TEXT_IO;
0043 with UNSIGNED32_IO;
0044 with RTEMS.CLOCK;
0045 with RTEMS.EVENT;
0046 with RTEMS.TIMER;
0047 
0048 package body SPTEST is
0049 
0050 -- 
0051 --  INIT
0052 --
0053 
0054    procedure INIT (
0055       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0056    ) is
0057       pragma Unreferenced(ARGUMENT);
0058       STATUS : RTEMS.STATUS_CODES;
0059    begin
0060 
0061       TEXT_IO.NEW_LINE( 2 );
0062       TEST_SUPPORT.ADA_TEST_BEGIN;
0063 
0064       SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
0065       SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
0066 
0067       RTEMS.TASKS.CREATE( 
0068          SPTEST.TASK_NAME( 1 ), 
0069          4, 
0070          2048, 
0071          RTEMS.DEFAULT_MODES,
0072          RTEMS.DEFAULT_ATTRIBUTES,
0073          SPTEST.TASK_ID( 1 ),
0074          STATUS
0075       );
0076       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0077 
0078       RTEMS.TASKS.CREATE( 
0079          SPTEST.TASK_NAME( 2 ), 
0080          4, 
0081          2048, 
0082          RTEMS.DEFAULT_MODES,
0083          RTEMS.DEFAULT_ATTRIBUTES,
0084          SPTEST.TASK_ID( 2 ),
0085          STATUS
0086       );
0087       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
0088 
0089       RTEMS.TASKS.START(
0090          SPTEST.TASK_ID( 1 ),
0091          SPTEST.TASK_1'ACCESS,
0092          0,
0093          STATUS
0094       );
0095       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0096 
0097       RTEMS.TASKS.START(
0098          SPTEST.TASK_ID( 2 ),
0099          SPTEST.TASK_2'ACCESS,
0100          0,
0101          STATUS
0102       );
0103       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
0104 
0105       SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
0106       SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
0107       SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'M', '3', ' ' );
0108       SPTEST.TIMER_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'M', '4', ' ' );
0109       SPTEST.TIMER_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'M', '5', ' ' );
0110       SPTEST.TIMER_NAME( 6 ) := RTEMS.BUILD_NAME(  'T', 'M', '6', ' ' );
0111 
0112       RTEMS.TIMER.CREATE( 
0113          SPTEST.TIMER_NAME( 1 ),
0114          SPTEST.TIMER_ID( 1 ),
0115          STATUS
0116       );
0117       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
0118 
0119       RTEMS.TIMER.CREATE( 
0120          SPTEST.TIMER_NAME( 2 ),
0121          SPTEST.TIMER_ID( 2 ),
0122          STATUS
0123       );
0124       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM2" );
0125 
0126       RTEMS.TIMER.CREATE( 
0127          SPTEST.TIMER_NAME( 3 ),
0128          SPTEST.TIMER_ID( 3 ),
0129          STATUS
0130       );
0131       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM3" );
0132 
0133       RTEMS.TIMER.CREATE( 
0134          SPTEST.TIMER_NAME( 4 ),
0135          SPTEST.TIMER_ID( 4 ),
0136          STATUS
0137       );
0138       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM4" );
0139 
0140       RTEMS.TIMER.CREATE( 
0141          SPTEST.TIMER_NAME( 5 ),
0142          SPTEST.TIMER_ID( 5 ),
0143          STATUS
0144       );
0145       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM5" );
0146 
0147       RTEMS.TIMER.CREATE( 
0148          SPTEST.TIMER_NAME( 6 ),
0149          SPTEST.TIMER_ID( 6 ),
0150          STATUS
0151       );
0152       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM6" );
0153 
0154       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0155       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0156 
0157    end INIT;
0158 
0159 -- 
0160 --  TASK_1
0161 --
0162 
0163    procedure TASK_1 (
0164       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0165    ) is
0166       pragma Unreferenced(ARGUMENT);
0167       EVENTOUT : RTEMS.EVENT_SET;
0168       TIME     : RTEMS.TIME_OF_DAY;
0169       STATUS   : RTEMS.STATUS_CODES;
0170       INDEX    : RTEMS.UNSIGNED32;
0171    begin
0172 
0173       TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_16 to TA2" );
0174       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_16, STATUS );
0175       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 16" );
0176 
0177       TEXT_IO.PUT_LINE( 
0178          "TA1 - event_receive - waiting forever on EVENT_14 and EVENT_15"
0179       );
0180       RTEMS.EVENT.RECEIVE( 
0181          RTEMS.EVENT_14 + RTEMS.EVENT_15,
0182          RTEMS.DEFAULT_OPTIONS,
0183          RTEMS.NO_TIMEOUT,
0184          EVENTOUT,
0185          STATUS
0186       );
0187       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14 and 15" );
0188       TEXT_IO.PUT( "TA1 - EVENT_14 and EVENT_15 received - eventout => ");
0189       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0190       TEXT_IO.NEW_LINE;
0191 
0192       TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_18 to TA2" );
0193       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_18, STATUS );
0194       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
0195 
0196       TEXT_IO.PUT_LINE( 
0197          "TA1 - event_receive - waiting with 10 second timeout on EVENT_14"
0198       );
0199       RTEMS.EVENT.RECEIVE( 
0200          RTEMS.EVENT_14,
0201          RTEMS.DEFAULT_OPTIONS,
0202          10 * TEST_SUPPORT.TICKS_PER_SECOND,
0203          EVENTOUT,
0204          STATUS
0205       );
0206       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14" );
0207       TEXT_IO.PUT( "TA1 - EVENT_14 received - eventout => ");
0208       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0209       TEXT_IO.NEW_LINE;
0210 
0211       TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_19 to TA2" );
0212       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_19, STATUS );
0213       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 19" );
0214 
0215       RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0216       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0217       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
0218       TEXT_IO.NEW_LINE;
0219 
0220       TEST_SUPPORT.PAUSE;
0221 
0222       TEXT_IO.PUT_LINE( 
0223          "TA1 - event_send - send EVENT_18 to self after 5 seconds"
0224       );
0225       RTEMS.TIMER.FIRE_AFTER( 
0226          SPTEST.TIMER_ID( 1 ),
0227          5 * TEST_SUPPORT.TICKS_PER_SECOND,
0228          SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
0229          RTEMS.NULL_ADDRESS,
0230          STATUS
0231       );
0232       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
0233 
0234       TEXT_IO.PUT_LINE( 
0235          "TA1 - event_receive - waiting forever on EVENT_18"
0236       );
0237       RTEMS.EVENT.RECEIVE( 
0238          RTEMS.EVENT_18,
0239          RTEMS.DEFAULT_OPTIONS,
0240          RTEMS.NO_TIMEOUT,
0241          EVENTOUT,
0242          STATUS
0243       );
0244       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 18" );
0245 
0246       RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0247       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0248 
0249       TEXT_IO.PUT( "TA1 - EVENT_18 received - eventout => ");
0250       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0251       TEXT_IO.NEW_LINE;
0252 
0253       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
0254       TEXT_IO.NEW_LINE;
0255 
0256       TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_3 to self" );
0257       RTEMS.EVENT.SEND( RTEMS.SELF, RTEMS.EVENT_3, STATUS );
0258       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 3" );
0259 
0260       TEXT_IO.PUT_LINE( 
0261          "TA1 - event_receive - EVENT_3 or EVENT_22 - NO_WAIT and EVENT_ANY"
0262       );
0263       RTEMS.EVENT.RECEIVE( 
0264          RTEMS.EVENT_3 + RTEMS.EVENT_22,
0265          RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
0266          RTEMS.NO_TIMEOUT,
0267          EVENTOUT,
0268          STATUS
0269       );
0270       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 3 and 22" );
0271       TEXT_IO.PUT( "TA1 - EVENT_3 received - eventout => ");
0272       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0273       TEXT_IO.NEW_LINE;
0274 
0275       TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_4 to self" );
0276       RTEMS.EVENT.SEND( RTEMS.SELF, RTEMS.EVENT_4, STATUS );
0277       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 4" );
0278 
0279       TEXT_IO.PUT_LINE( 
0280 "TA1 - event_receive - waiting forever on EVENT_4 or EVENT_5 - EVENT_ANY"
0281       );
0282       RTEMS.EVENT.RECEIVE( 
0283          RTEMS.EVENT_4 + RTEMS.EVENT_5,
0284          RTEMS.EVENT_ANY,
0285          RTEMS.NO_TIMEOUT,
0286          EVENTOUT,
0287          STATUS
0288       );
0289       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 4 and 5" );
0290       TEXT_IO.PUT( "TA1 - EVENT_4 received - eventout => ");
0291       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0292       TEXT_IO.NEW_LINE;
0293 
0294       TEST_SUPPORT.PAUSE;
0295 
0296       TEXT_IO.PUT_LINE( 
0297          "TA1 - event_send - send EVENT_18 to self after 5 seconds"
0298       );
0299       RTEMS.TIMER.FIRE_AFTER( 
0300          SPTEST.TIMER_ID( 1 ),
0301          5 * TEST_SUPPORT.TICKS_PER_SECOND,
0302          SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
0303          RTEMS.NULL_ADDRESS,
0304          STATUS
0305       );
0306       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
0307 
0308       TEXT_IO.PUT_LINE( 
0309          "TA1 - timer_cancel - cancelling timer for event EVENT_18"
0310       );
0311       RTEMS.TIMER.CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
0312       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
0313 
0314       TEXT_IO.PUT_LINE( 
0315          "TA1 - event_send - send EVENT_8 to self after 60 seconds"
0316       );
0317       RTEMS.TIMER.FIRE_AFTER( 
0318          SPTEST.TIMER_ID( 1 ),
0319          60 * TEST_SUPPORT.TICKS_PER_SECOND,
0320          SPTEST.TA1_SEND_8_TO_SELF_60_SECONDS'ACCESS,
0321          RTEMS.NULL_ADDRESS,
0322          STATUS
0323       );
0324       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
0325 
0326       TEXT_IO.PUT_LINE( 
0327          "TA1 - event_send - send EVENT_9 to self after 60 seconds"
0328       );
0329       RTEMS.TIMER.FIRE_AFTER( 
0330          SPTEST.TIMER_ID( 2 ),
0331          60 * TEST_SUPPORT.TICKS_PER_SECOND,
0332          SPTEST.TA1_SEND_9_TO_SELF_60_SECONDS'ACCESS,
0333          RTEMS.NULL_ADDRESS,
0334          STATUS
0335       );
0336       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
0337 
0338       TEXT_IO.PUT_LINE( 
0339          "TA1 - event_send - send EVENT_10 to self after 60 seconds"
0340       );
0341       RTEMS.TIMER.FIRE_AFTER( 
0342          SPTEST.TIMER_ID( 3 ),
0343          60 * TEST_SUPPORT.TICKS_PER_SECOND,
0344          SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
0345          RTEMS.NULL_ADDRESS,
0346          STATUS
0347       );
0348       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
0349 
0350       TEXT_IO.PUT_LINE( 
0351          "TA1 - timer_cancel - cancelling timer for event EVENT_8"
0352       );
0353       RTEMS.TIMER.CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
0354       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
0355 
0356       TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
0357 
0358       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
0359       TEXT_IO.NEW_LINE;
0360       RTEMS.CLOCK.SET( TIME, STATUS );
0361       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
0362 
0363       TEXT_IO.PUT_LINE( 
0364          "TA1 - event_send - send EVENT_1 every second"
0365       );
0366       RTEMS.TIMER.FIRE_AFTER( 
0367          SPTEST.TIMER_ID( 1 ),
0368          TEST_SUPPORT.TICKS_PER_SECOND,
0369          SPTEST.TA1_SEND_1_TO_SELF_EVERY_SECOND'ACCESS,
0370          RTEMS.NULL_ADDRESS,
0371          STATUS
0372       );
0373       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 1 SECOND" );
0374 
0375       INDEX := 0;
0376 
0377       loop
0378 
0379          exit when INDEX = 3;
0380 
0381          RTEMS.EVENT.RECEIVE( 
0382             RTEMS.EVENT_1,
0383             RTEMS.EVENT_ANY,
0384             RTEMS.NO_TIMEOUT,
0385             EVENTOUT,
0386             STATUS
0387          );
0388          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 1" );
0389 
0390          RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0391          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0392 
0393          TEXT_IO.PUT( "TA1 - EVENT_1 received - eventout => ");
0394          UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0395          TEST_SUPPORT.PRINT_TIME( " - at ", TIME, "" );
0396          TEXT_IO.NEW_LINE;
0397 
0398          if INDEX < 2 then
0399             RTEMS.TIMER.RESET( SPTEST.TIMER_ID( 1 ), STATUS );
0400             TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 TIMER RESET" );
0401          end if;
0402 
0403          INDEX := INDEX + 1;
0404       end loop;
0405 
0406       TEXT_IO.PUT_LINE( 
0407          "TA1 - timer_cancel - cancelling timer for event EVENT_1"
0408       );
0409       RTEMS.TIMER.CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
0410       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
0411 
0412       TEST_SUPPORT.PAUSE;
0413 
0414       TIME.DAY := 13;
0415       TEXT_IO.PUT_LINE( 
0416          "TA1 - event_send - send EVENT_11 to self in 1 day"
0417       );
0418       RTEMS.TIMER.FIRE_WHEN( 
0419          SPTEST.TIMER_ID( 1 ),
0420          TIME,
0421          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0422          RTEMS.NULL_ADDRESS,
0423          STATUS
0424       );
0425       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
0426 
0427       TIME.HOUR := 7;
0428       TEXT_IO.PUT_LINE( 
0429          "TA1 - event_send - send EVENT_11 to self in 1 day"
0430       );
0431       RTEMS.TIMER.FIRE_WHEN( 
0432          SPTEST.TIMER_ID( 2 ),
0433          TIME,
0434          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0435          RTEMS.NULL_ADDRESS,
0436          STATUS
0437       );
0438       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
0439       TIME.HOUR := 8;
0440 
0441       TIME.DAY := 14;
0442       TEXT_IO.PUT_LINE( 
0443          "TA1 - event_send - send EVENT_11 to self in 2 days"
0444       );
0445       RTEMS.TIMER.FIRE_WHEN( 
0446          SPTEST.TIMER_ID( 3 ),
0447          TIME,
0448          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0449          RTEMS.NULL_ADDRESS,
0450          STATUS
0451       );
0452       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
0453 
0454       TEXT_IO.PUT_LINE( 
0455          "TA1 - timer_cancel - cancelling EVENT_11 to self in 1 day"
0456       );
0457       RTEMS.TIMER.CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
0458       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
0459 
0460       TEXT_IO.PUT_LINE( 
0461          "TA1 - timer_cancel - cancelling EVENT_11 to self in 2 days"
0462       );
0463       RTEMS.TIMER.CANCEL( SPTEST.TIMER_ID( 3 ), STATUS );
0464       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
0465 
0466       TEXT_IO.PUT_LINE( 
0467          "TA1 - event_send - resending EVENT_11 to self in 2 days"
0468       );
0469       RTEMS.TIMER.FIRE_WHEN( 
0470          SPTEST.TIMER_ID( 3 ),
0471          TIME,
0472          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0473          RTEMS.NULL_ADDRESS,
0474          STATUS
0475       );
0476       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
0477 
0478       TIME.DAY := 15;
0479       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
0480       TEXT_IO.NEW_LINE;
0481       RTEMS.CLOCK.SET( TIME, STATUS );
0482       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
0483       TEXT_IO.PUT_LINE( 
0484          "TA1 - event_receive - waiting forever on EVENT_11"
0485       );
0486       RTEMS.EVENT.RECEIVE( 
0487          RTEMS.EVENT_11,
0488          RTEMS.DEFAULT_OPTIONS,
0489          RTEMS.NO_TIMEOUT,
0490          EVENTOUT,
0491          STATUS
0492       );
0493       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 11" );
0494       TEXT_IO.PUT( "TA1 - EVENT_11 received - eventout => ");
0495       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0496       TEXT_IO.NEW_LINE;
0497 
0498       TEST_SUPPORT.PAUSE;
0499 
0500 -- The following code tests the case of deleting a timer ???
0501 
0502       TEXT_IO.PUT_LINE( "TA1 - event_send/event_receive combination" );
0503       RTEMS.TIMER.FIRE_AFTER( 
0504          SPTEST.TIMER_ID( 1 ),
0505          10,
0506          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0507          RTEMS.NULL_ADDRESS,
0508          STATUS
0509       );
0510       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 10 ticks" );
0511       RTEMS.EVENT.RECEIVE( 
0512          RTEMS.EVENT_11,
0513          RTEMS.DEFAULT_OPTIONS,
0514          11,
0515          EVENTOUT,
0516          STATUS
0517       );
0518       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
0519 
0520       TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
0521 
0522       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
0523       TEXT_IO.NEW_LINE;
0524       RTEMS.CLOCK.SET( TIME, STATUS );
0525       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
0526 
0527       TIME.DAY := 13;
0528       TEXT_IO.PUT_LINE( 
0529          "TA1 - event_receive all outstanding events"
0530       );
0531       RTEMS.EVENT.RECEIVE(
0532          RTEMS.ALL_EVENTS,
0533          RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
0534          RTEMS.NO_TIMEOUT,
0535          EVENTOUT,
0536          STATUS
0537       );
0538       TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
0539          STATUS, 
0540          RTEMS.UNSATISFIED, 
0541          "EVENT_RECEIVE all events" 
0542       );
0543 
0544       TEXT_IO.PUT_LINE( 
0545          "TA1 - event_send - send EVENT_10 to self in 1 day"
0546       );
0547       RTEMS.TIMER.FIRE_WHEN( 
0548          SPTEST.TIMER_ID( 1 ),
0549          TIME,
0550          SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
0551          RTEMS.NULL_ADDRESS,
0552          STATUS
0553       );
0554       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
0555 
0556       TIME.DAY := 14;
0557       TEXT_IO.PUT_LINE( 
0558          "TA1 - event_send - send EVENT_11 to self in 2 days"
0559       );
0560       RTEMS.TIMER.FIRE_WHEN( 
0561          SPTEST.TIMER_ID( 2 ),
0562          TIME,
0563          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0564          RTEMS.NULL_ADDRESS,
0565          STATUS
0566       );
0567       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
0568 
0569       TIME := ( 1988, 2, 12, 7, 15, 0, 0 );
0570 
0571       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
0572       TEXT_IO.NEW_LINE;
0573       TEXT_IO.PUT_LINE( "TA1 - set time backwards" );
0574       RTEMS.CLOCK.SET( TIME, STATUS );
0575       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
0576 
0577       RTEMS.EVENT.RECEIVE( 
0578          RTEMS.ALL_EVENTS,
0579          RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
0580          RTEMS.NO_TIMEOUT,
0581          EVENTOUT,
0582          STATUS
0583       );
0584       if EVENTOUT >= RTEMS.EVENT_0 then 
0585          TEXT_IO.PUT( "ERROR - " );
0586          UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0587          TEXT_IO.PUT_LINE( " events received" );
0588       else
0589          TEXT_IO.PUT_LINE( "TA1 - no events received" );
0590       end if;
0591       TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
0592          STATUS, 
0593          RTEMS.UNSATISFIED, 
0594          "EVENT_RECEIVE all events" 
0595       );
0596 
0597       TIME := ( 1988, 2, 14, 7, 15, 0, 0 );
0598 
0599       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
0600       TEXT_IO.NEW_LINE;
0601       TEXT_IO.PUT_LINE( "TA1 - set time forwards (leave a timer)" );
0602       RTEMS.CLOCK.SET( TIME, STATUS );
0603       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
0604 
0605       RTEMS.EVENT.RECEIVE( 
0606          RTEMS.ALL_EVENTS,
0607          RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
0608          RTEMS.NO_TIMEOUT,
0609          EVENTOUT,
0610          STATUS
0611       );
0612       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE all events" );
0613       if EVENTOUT = RTEMS.EVENT_10 then 
0614          TEXT_IO.PUT_LINE( "TA1 - EVENT_10 received" );
0615       else
0616          TEXT_IO.PUT( "ERROR - " );
0617          UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0618          TEXT_IO.PUT_LINE( " events received" );
0619       end if;
0620          
0621       TEXT_IO.PUT_LINE( 
0622          "TA1 - event_send - send EVENT_11 to self in 100 ticks"
0623       );
0624       RTEMS.TIMER.FIRE_AFTER( 
0625          SPTEST.TIMER_ID( 1 ),
0626          100,
0627          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0628          RTEMS.NULL_ADDRESS,
0629          STATUS
0630       );
0631       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 100 ticks" );
0632 
0633       TEXT_IO.PUT_LINE( 
0634          "TA1 - event_send - send EVENT_11 to self in 200 ticks"
0635       );
0636       RTEMS.TIMER.FIRE_AFTER( 
0637          SPTEST.TIMER_ID( 2 ),
0638          100,
0639          SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
0640          RTEMS.NULL_ADDRESS,
0641          STATUS
0642       );
0643       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 200 ticks" );
0644 
0645       TEST_SUPPORT.ADA_TEST_END;
0646       RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0647 
0648    end TASK_1;
0649 
0650 -- 
0651 --  TASK_2
0652 --
0653 
0654    procedure TASK_2 (
0655       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0656    ) is
0657       pragma Unreferenced(ARGUMENT);
0658       EVENTOUT : RTEMS.EVENT_SET;
0659       TIME     : RTEMS.TIME_OF_DAY;
0660       STATUS   : RTEMS.STATUS_CODES;
0661    begin
0662 
0663       RTEMS.TASKS.WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0664       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0665 
0666       TEXT_IO.PUT_LINE( 
0667          "TA2 - event_receive - waiting forever on EVENT_16"
0668       );
0669       RTEMS.EVENT.RECEIVE( 
0670          RTEMS.EVENT_16,
0671          RTEMS.DEFAULT_OPTIONS,
0672          RTEMS.NO_TIMEOUT,
0673          EVENTOUT,
0674          STATUS
0675       );
0676       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 16" );
0677       TEXT_IO.PUT( "TA2 - EVENT_16 received - eventout => ");
0678       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0679       TEXT_IO.NEW_LINE;
0680 
0681       TEXT_IO.PUT_LINE( 
0682          "TA2 - event_send - send EVENT_14 and EVENT_15 to TA1"
0683       );
0684       RTEMS.EVENT.SEND( 
0685          SPTEST.TASK_ID( 1 ), 
0686          RTEMS.EVENT_14 + RTEMS.EVENT_15,
0687          STATUS
0688       );
0689       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14 and 15" );
0690 
0691       TEXT_IO.PUT_LINE( 
0692    "TA2 - event_receive - waiting forever on EVENT_17 or EVENT_18 - EVENT_ANY"
0693       );
0694       RTEMS.EVENT.RECEIVE( 
0695          RTEMS.EVENT_17 + RTEMS.EVENT_18,
0696          RTEMS.EVENT_ANY,
0697          RTEMS.NO_TIMEOUT,
0698          EVENTOUT,
0699          STATUS
0700       );
0701       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 17 and 18" );
0702       TEXT_IO.PUT( "TA2 - EVENT_17 or EVENT_18 received - eventout => ");
0703       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0704       TEXT_IO.NEW_LINE;
0705 
0706       TEXT_IO.PUT_LINE( 
0707          "TA2 - event_send - send EVENT_14 to TA1"
0708       );
0709       RTEMS.EVENT.SEND( 
0710          SPTEST.TASK_ID( 1 ), 
0711          RTEMS.EVENT_14,
0712          STATUS
0713       );
0714       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14" );
0715 
0716       TIME := ( 1988,  2, 12, 8, 15, 0, 0 );
0717 
0718       TEST_SUPPORT.PRINT_TIME( "TA2 - clock_set - ", TIME, "" );
0719       TEXT_IO.NEW_LINE;
0720       RTEMS.CLOCK.SET( TIME, STATUS );
0721       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA2 CLOCK_SET" );
0722 
0723       TIME.SECOND := TIME.SECOND + 5;
0724       TEXT_IO.PUT_LINE( 
0725          "TA2 - event_send - sending EVENT_10 to self after 5 seconds"
0726       );
0727       RTEMS.TIMER.FIRE_WHEN( 
0728          SPTEST.TIMER_ID( 5 ),
0729          TIME,
0730          SPTEST.TA2_SEND_10_TO_SELF'ACCESS,
0731          RTEMS.NULL_ADDRESS,
0732          STATUS
0733       );
0734       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 5 SECONDS" );
0735 
0736       TEXT_IO.PUT_LINE( 
0737          "TA2 - event_receive - waiting forever on EVENT_10"
0738       );
0739       RTEMS.EVENT.RECEIVE( 
0740          RTEMS.EVENT_10,
0741          RTEMS.DEFAULT_OPTIONS,
0742          RTEMS.NO_TIMEOUT,
0743          EVENTOUT,
0744          STATUS
0745       );
0746       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
0747 
0748       RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0749       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0750 
0751       TEXT_IO.PUT( "TA2 - EVENT_10 received - eventout => ");
0752       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0753       TEXT_IO.NEW_LINE;
0754 
0755       TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
0756       TEXT_IO.NEW_LINE;
0757 
0758       TEXT_IO.PUT_LINE( "TA2 - event_receive - PENDING_EVENTS" );
0759       RTEMS.EVENT.RECEIVE( 
0760          RTEMS.PENDING_EVENTS,
0761          RTEMS.DEFAULT_OPTIONS,
0762          RTEMS.NO_TIMEOUT,
0763          EVENTOUT,
0764          STATUS
0765       );
0766       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
0767       TEXT_IO.PUT( "TA2 - eventout => ");
0768       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0769       TEXT_IO.NEW_LINE;
0770 
0771       TEXT_IO.PUT_LINE( 
0772          "TA2 - event_receive - EVENT_19 - NO_WAIT"
0773       );
0774       RTEMS.EVENT.RECEIVE( 
0775          RTEMS.EVENT_19,
0776          RTEMS.NO_WAIT,
0777          RTEMS.NO_TIMEOUT,
0778          EVENTOUT,
0779          STATUS
0780       );
0781       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
0782       TEXT_IO.PUT( "TA2 - EVENT_19 received - eventout => ");
0783       UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
0784       TEXT_IO.NEW_LINE;
0785 
0786       TEXT_IO.PUT_LINE( "TA2 - task_delete - deletes self" );
0787       RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 2 ), STATUS );
0788       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE of TA2" );
0789 
0790    end TASK_2;
0791 
0792 -- 
0793 --  TA1_SEND_18_TO_SELF_5_SECONDS
0794 --
0795 
0796    procedure TA1_SEND_18_TO_SELF_5_SECONDS (
0797       IGNORED_ID      : in     RTEMS.ID;
0798       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0799    )
0800    is
0801       pragma Unreferenced(IGNORED_ID);
0802       pragma Unreferenced(IGNORED_ADDRESS);
0803       STATUS : RTEMS.STATUS_CODES;
0804    begin
0805 
0806       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_18, STATUS );
0807       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
0808 
0809    end TA1_SEND_18_TO_SELF_5_SECONDS;
0810 
0811 -- 
0812 --  TA1_SEND_8_TO_SELF_60_SECONDS
0813 --
0814 
0815    procedure TA1_SEND_8_TO_SELF_60_SECONDS (
0816       IGNORED_ID      : in     RTEMS.ID;
0817       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0818    )
0819    is
0820       pragma Unreferenced(IGNORED_ID);
0821       pragma Unreferenced(IGNORED_ADDRESS);
0822       STATUS : RTEMS.STATUS_CODES;
0823    begin
0824 
0825       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_8, STATUS );
0826       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 8" );
0827 
0828    end TA1_SEND_8_TO_SELF_60_SECONDS;
0829 
0830 -- 
0831 --  TA1_SEND_9_TO_SELF_60_SECONDS
0832 --
0833 
0834    procedure TA1_SEND_9_TO_SELF_60_SECONDS (
0835       IGNORED_ID      : in     RTEMS.ID;
0836       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0837    )
0838    is
0839       pragma Unreferenced(IGNORED_ID);
0840       pragma Unreferenced(IGNORED_ADDRESS);
0841       STATUS : RTEMS.STATUS_CODES;
0842    begin
0843 
0844       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_9, STATUS );
0845       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 9" );
0846 
0847    end TA1_SEND_9_TO_SELF_60_SECONDS;
0848 
0849 -- 
0850 --  TA1_SEND_10_TO_SELF
0851 --
0852 
0853    procedure TA1_SEND_10_TO_SELF (
0854       IGNORED_ID      : in     RTEMS.ID;
0855       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0856    )
0857    is
0858       pragma Unreferenced(IGNORED_ID);
0859       pragma Unreferenced(IGNORED_ADDRESS);
0860       STATUS : RTEMS.STATUS_CODES;
0861    begin
0862 
0863       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_10, STATUS );
0864       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
0865 
0866    end TA1_SEND_10_TO_SELF;
0867 
0868 -- 
0869 --  TA1_SEND_1_TO_SELF_EVERY_SECOND
0870 --
0871 
0872    procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
0873       IGNORED_ID      : in     RTEMS.ID;
0874       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0875    )
0876    is
0877       pragma Unreferenced(IGNORED_ID);
0878       pragma Unreferenced(IGNORED_ADDRESS);
0879       STATUS : RTEMS.STATUS_CODES;
0880    begin
0881 
0882       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_1, STATUS );
0883       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 1" );
0884 
0885    end TA1_SEND_1_TO_SELF_EVERY_SECOND;
0886 
0887 -- 
0888 --  TA1_SEND_11_TO_SELF
0889 --
0890 
0891    procedure TA1_SEND_11_TO_SELF (
0892       IGNORED_ID      : in     RTEMS.ID;
0893       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0894    )
0895    is
0896       pragma Unreferenced(IGNORED_ID);
0897       pragma Unreferenced(IGNORED_ADDRESS);
0898       STATUS : RTEMS.STATUS_CODES;
0899    begin
0900 
0901       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_11, STATUS );
0902       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 11" );
0903 
0904    end TA1_SEND_11_TO_SELF;
0905 
0906 -- 
0907 --  TA2_SEND_10_TO_SELF
0908 --
0909 
0910    procedure TA2_SEND_10_TO_SELF (
0911       IGNORED_ID      : in     RTEMS.ID;
0912       IGNORED_ADDRESS : in     RTEMS.ADDRESS
0913    )
0914    is
0915       pragma Unreferenced(IGNORED_ID);
0916       pragma Unreferenced(IGNORED_ADDRESS);
0917       STATUS : RTEMS.STATUS_CODES;
0918    begin
0919 
0920       RTEMS.EVENT.SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_10, STATUS );
0921       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
0922 
0923    end TA2_SEND_10_TO_SELF;
0924 
0925 end SPTEST;