Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:44

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  COPYRIGHT (c) 1989-2011.
0005  *  On-Line Applications Research Corporation (OAR).
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions and the following disclaimer.
0012  * 2. Redistributions in binary form must reproduce the above copyright
0013  *    notice, this list of conditions and the following disclaimer in the
0014  *    documentation and/or other materials provided with the distribution.
0015  *
0016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0026  * POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032 
0033 #include "system.h"
0034 
0035 rtems_task Task_1(
0036   rtems_task_argument argument
0037 )
0038 {
0039   rtems_event_set   eventout;
0040   rtems_time_of_day time;
0041   rtems_status_code status;
0042   uint32_t          index;
0043 
0044   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_16 to TA2" );
0045   status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_16 );
0046   directive_failed( status, "rtems_event_send" );
0047 
0048   puts(
0049     "TA1 - rtems_event_receive - waiting forever on "
0050       "RTEMS_EVENT_14 and RTEMS_EVENT_15"
0051   );
0052   status = rtems_event_receive(
0053     RTEMS_EVENT_14 | RTEMS_EVENT_15,
0054     RTEMS_DEFAULT_OPTIONS,
0055     RTEMS_NO_TIMEOUT,
0056     &eventout
0057   );
0058   directive_failed( status, "rtems_event_receive" );
0059   printf(
0060     "TA1 - RTEMS_EVENT_14 and RTEMS_EVENT_15 received - "
0061       "eventout => %08" PRIxrtems_event_set "\n",
0062     eventout
0063   );
0064 
0065   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to TA2" );
0066   status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_18 );
0067   directive_failed( status, "rtems_event_send" );
0068 
0069   puts(
0070     "TA1 - rtems_event_receive - waiting with 10 second timeout "
0071       "on RTEMS_EVENT_14"
0072   );
0073   status = rtems_event_receive(
0074     RTEMS_EVENT_14,
0075     RTEMS_DEFAULT_OPTIONS,
0076     10 * rtems_clock_get_ticks_per_second(),
0077     &eventout
0078   );
0079   directive_failed( status, "rtems_event_receive" );
0080   printf(
0081     "TA1 - RTEMS_EVENT_14 received - eventout => "
0082       "%08" PRIxrtems_event_set "\n",
0083     eventout
0084   );
0085 
0086   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_19 to TA2" );
0087   status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_19 );
0088   directive_failed( status, "rtems_event_send" );
0089 
0090   status = rtems_clock_get_tod( &time );
0091   directive_failed( status, "rtems_clock_get_tod" );
0092   print_time( "TA1 - rtems_clock_get_tod - ", &time, "\n" );
0093 
0094   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to self after 5 seconds");
0095   status = rtems_timer_fire_after(
0096     Timer_id[ 1 ],
0097     5 * rtems_clock_get_ticks_per_second(),
0098     TA1_send_18_to_self_5_seconds,
0099     NULL
0100   );
0101   directive_failed( status, "rtems_timer_fire_after 5 seconds" );
0102 
0103   puts( "TA1 - rtems_event_receive - waiting forever on RTEMS_EVENT_18"  );
0104   status = rtems_event_receive(
0105     RTEMS_EVENT_18,
0106     RTEMS_DEFAULT_OPTIONS,
0107     RTEMS_NO_TIMEOUT,
0108     &eventout
0109   );
0110   directive_failed( status, "rtems_event_receive of 18" );
0111   printf(
0112     "TA1 - RTEMS_EVENT_18 received - eventout => %08" PRIxrtems_event_set "\n",
0113     eventout
0114   );
0115 
0116   status = rtems_clock_get_tod( &time );
0117   directive_failed( status, "TA1 rtems_clock_get_tod" );
0118   print_time( "TA1 - rtems_clock_get_tod - ", &time, "\n" );
0119 
0120   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_3 to self" );
0121   status = rtems_event_send( RTEMS_SELF, RTEMS_EVENT_3 );
0122   directive_failed( status, "rtems_event_send" );
0123 
0124   puts(
0125     "TA1 - rtems_event_receive - RTEMS_EVENT_3 or "
0126       "RTEMS_EVENT_22 - NO_WAIT and ANY"
0127   );
0128   status = rtems_event_receive(
0129     RTEMS_EVENT_3 | RTEMS_EVENT_22,
0130     RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
0131     RTEMS_NO_TIMEOUT,
0132     &eventout
0133   );
0134   directive_failed( status, "rtems_event_receive of 3 and 22" );
0135   printf(
0136     "TA1 - RTEMS_EVENT_3 received - eventout => %08" PRIxrtems_event_set "\n",
0137     eventout
0138   );
0139 
0140   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_4 to self" );
0141   status = rtems_event_send( RTEMS_SELF, RTEMS_EVENT_4 );
0142   directive_failed( status, "rtems_event_send" );
0143 
0144   puts (
0145   "TA1 - rtems_event_receive - RTEMS_EVENT_4 or "
0146       "RTEMS_EVENT_5 - forever and ANY"
0147   );
0148   status = rtems_event_receive(
0149     RTEMS_EVENT_4 | RTEMS_EVENT_5,
0150     RTEMS_EVENT_ANY,
0151     RTEMS_NO_TIMEOUT,
0152     &eventout
0153   );
0154   directive_failed( status, "rtems_event_receive" );
0155   printf(
0156     "TA1 - RTEMS_EVENT_4 received - eventout => %08" PRIxrtems_event_set "\n",
0157     eventout 
0158   );
0159 
0160   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_18 to self after 5 seconds");
0161   status = rtems_timer_fire_after(
0162     Timer_id[ 1 ],
0163     5 * rtems_clock_get_ticks_per_second(),
0164     TA1_send_18_to_self_5_seconds,
0165     NULL
0166   );
0167   directive_failed( status, "rtems_timer_fire_after 5 seconds" );
0168 
0169   puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_18");
0170   status = rtems_timer_cancel( Timer_id[ 1 ] );
0171   directive_failed( status, "rtems_timer_cancel" );
0172 
0173   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_8 to self after 60 seconds");
0174   status = rtems_timer_fire_after(
0175     Timer_id[ 1 ],
0176     60 * rtems_clock_get_ticks_per_second(),
0177     TA1_send_8_to_self_60_seconds,
0178     NULL
0179   );
0180   directive_failed( status, "rtems_timer_fire_after 60 seconds" );
0181 
0182   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_9 to self after 60 seconds");
0183   status = rtems_timer_fire_after(
0184     Timer_id[ 2 ],
0185     60 * rtems_clock_get_ticks_per_second(),
0186     TA1_send_9_to_self_60_seconds,
0187     NULL
0188   );
0189   directive_failed( status, "rtems_timer_fire_after 60 seconds" );
0190 
0191   puts(
0192     "TA1 - rtems_event_send - send RTEMS_EVENT_10 to self after 60 seconds"
0193   );
0194   status = rtems_timer_fire_after(
0195     Timer_id[ 3 ],
0196     60 * rtems_clock_get_ticks_per_second(),
0197     TA1_send_10_to_self,
0198     NULL
0199   );
0200   directive_failed( status, "rtems_timer_fire_after 60 seconds" );
0201 
0202   puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_8" );
0203   status = rtems_timer_cancel( Timer_id[ 1 ] );
0204   directive_failed( status, "rtems_timer_cancel" );
0205 
0206   build_time( &time, 2, 12, 1988, 8, 15, 0, 0 );
0207 
0208   print_time( "TA1 - rtems_clock_set - ", &time, "\n" );
0209   status = rtems_clock_set( &time );
0210   directive_failed( status, "rtems_clock_set" );
0211 
0212   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_1 every second" );
0213   status = rtems_timer_fire_after(
0214     Timer_id[ 1 ],
0215     rtems_clock_get_ticks_per_second(),
0216     TA1_send_1_to_self_every_second,
0217     NULL
0218   );
0219   directive_failed( status, "rtems_timer_fire_after 1 second" );
0220 
0221   for ( index = 0; index < 3; index++ ) {
0222 
0223     status = rtems_event_receive(
0224       RTEMS_EVENT_1,
0225       RTEMS_EVENT_ANY,
0226       RTEMS_NO_TIMEOUT,
0227       &eventout
0228     );
0229     directive_failed( status, "rtems_event_receive" );
0230 
0231     status = rtems_clock_get_tod( &time );
0232     directive_failed( status, "rtems_clock_get_tod" );
0233 
0234     printf(
0235       "TA1 - RTEMS_EVENT_1 received - eventout => %08"
0236         PRIxrtems_event_set " - ",
0237        eventout
0238     );
0239     print_time( "at ", &time, "\n" );
0240 
0241     if ( index < 2 ) {
0242       status = rtems_timer_reset( Timer_id[ 1 ] );
0243       directive_failed( status, "rtems_timer_reset" );
0244     };
0245 
0246   }
0247 
0248   puts( "TA1 - rtems_timer_cancel - cancelling timer for event RTEMS_EVENT_1" );
0249   status = rtems_timer_cancel( Timer_id[ 1 ] );
0250   directive_failed( status, "rtems_timer_cancel" );
0251 
0252   time.day = 13;
0253   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 1 day" );
0254   status = rtems_timer_fire_when(
0255     Timer_id[ 1 ],
0256     &time,
0257     TA1_send_11_to_self,
0258     NULL
0259   );
0260   directive_failed( status, "rtems_timer_fire_when 1 day" );
0261 
0262   time.hour = 7;
0263   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 1 day" );
0264   status = rtems_timer_fire_when(
0265     Timer_id[ 2 ],
0266     &time,
0267     TA1_send_11_to_self,
0268     NULL
0269   );
0270   directive_failed( status, "rtems_timer_fire_when 1 day" );
0271 
0272   time.hour = 8;   /* so code below has correct time/date */
0273   time.day = 14;
0274   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 2 days" );
0275   status = rtems_timer_fire_when(
0276     Timer_id[ 3 ],
0277     &time,
0278     TA1_send_11_to_self,
0279     NULL
0280   );
0281   directive_failed( status, "rtems_timer_fire_when 2 days" );
0282 
0283   puts("TA1 - rtems_timer_cancel - cancelling RTEMS_EVENT_11 to self in 1 day");
0284   status = rtems_timer_cancel( Timer_id[ 1 ] );
0285   directive_failed( status, "rtems_timer_cancel" );
0286 
0287   puts(
0288     "TA1 - rtems_timer_cancel - cancelling RTEMS_EVENT_11 to self in 2 days"
0289   );
0290   status = rtems_timer_cancel( Timer_id[ 3 ] );
0291   directive_failed( status, "rtems_timer_cancel" );
0292 
0293   puts(
0294     "TA1 - rtems_event_send - resending RTEMS_EVENT_11 to self in 2 days"
0295   );
0296   status = rtems_timer_fire_when(
0297     Timer_id[ 3 ],
0298     &time,
0299     TA1_send_11_to_self,
0300     NULL
0301   );
0302   directive_failed( status, "rtems_timer_fire_when 2 days" );
0303 
0304   time.day = 15;
0305   print_time( "TA1 - rtems_clock_set - ", &time, "\n" );
0306   status = rtems_clock_set( &time );
0307   directive_failed( status, "TA1 rtems_clock_set" );
0308 
0309   puts( "TA1 - rtems_event_receive - waiting forever on RTEMS_EVENT_11" );
0310   status = rtems_event_receive(
0311     RTEMS_EVENT_11,
0312     RTEMS_DEFAULT_OPTIONS,
0313     RTEMS_NO_TIMEOUT,
0314     &eventout
0315   );
0316   directive_failed( status, "rtems_event_receive" );
0317   printf(
0318     "TA1 - RTEMS_EVENT_11 received - eventout => %08" PRIxrtems_event_set "\n",
0319      eventout
0320   );
0321 
0322   puts( "TA1 - rtems_event_send/rtems_event_receive combination" );
0323   status = rtems_timer_fire_after(
0324     Timer_id[ 1 ],
0325     10,
0326     TA1_send_11_to_self,
0327     NULL
0328   );
0329   directive_failed( status, "rtems_timer_fire_after 10 ticks" );
0330 
0331   status = rtems_event_receive(
0332     RTEMS_EVENT_11,
0333     RTEMS_DEFAULT_OPTIONS,
0334     RTEMS_NO_TIMEOUT,
0335     &eventout
0336   );
0337   directive_failed( status, "rtems_event_receive" );
0338 
0339   build_time( &time, 2, 12, 1988, 8, 15, 0, 0 );
0340 
0341   print_time( "TA1 - rtems_clock_set - ", &time, "\n" );
0342   status = rtems_clock_set( &time );
0343   directive_failed( status, "rtems_clock_set" );
0344 
0345   time.day = 13;
0346   puts( "TA1 - rtems_event_receive all outstanding events" );
0347   status  = rtems_event_receive(
0348     RTEMS_ALL_EVENTS,
0349     RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
0350     0,
0351     &eventout
0352   );
0353   fatal_directive_status(
0354     status,
0355     RTEMS_UNSATISFIED,
0356     "rtems_event_receive all events"
0357   );
0358 
0359   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_10 to self in 1 day" );
0360   status = rtems_timer_fire_when(
0361     Timer_id[ 1 ],
0362     &time,
0363     TA1_send_10_to_self,
0364     NULL
0365   );
0366   directive_failed( status, "rtems_timer_fire_when 1 day" );
0367 
0368   time.day = 14;
0369   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 2 days" );
0370   status = rtems_timer_fire_when(
0371     Timer_id[ 2 ],
0372     &time,
0373     TA1_send_11_to_self,
0374     NULL
0375   );
0376   directive_failed( status, "rtems_timer_fire_when 2 days" );
0377 
0378   build_time( &time, 2, 12, 1988, 7, 15, 0, 0 );
0379 
0380   print_time( "TA1 - rtems_clock_set - ", &time, "\n" );
0381   puts( "TA1 - set time backwards" );
0382   status = rtems_clock_set( &time );
0383   directive_failed( status, "rtems_clock_set" );
0384 
0385   status  = rtems_event_receive(
0386     RTEMS_ALL_EVENTS,
0387     RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
0388     RTEMS_NO_TIMEOUT,
0389     &eventout
0390   );
0391   if ( eventout )
0392     printf( "ERROR -0x%08" PRIxrtems_event_set " events received\n", eventout );
0393   else
0394     puts( "TA1 - no events received" );
0395   fatal_directive_status(
0396     status,
0397     RTEMS_UNSATISFIED,
0398     "rtems_event_receive all events"
0399   );
0400 
0401   build_time( &time, 2, 14, 1988, 7, 15, 0, 0 );
0402 
0403   print_time( "TA1 - rtems_clock_set - ", &time, "\n" );
0404   puts( "TA1 - set time forwards (leave a timer)" );
0405   status = rtems_clock_set( &time );
0406   directive_failed( status, "rtems_clock_set" );
0407 
0408   status  = rtems_event_receive(
0409     RTEMS_ALL_EVENTS,
0410     RTEMS_NO_WAIT | RTEMS_EVENT_ANY,
0411     RTEMS_NO_TIMEOUT,
0412     &eventout
0413   );
0414   if ( eventout == RTEMS_EVENT_10 )
0415     puts( "TA1 - RTEMS_EVENT_10 received" );
0416   else
0417     printf( "ERROR -0x%08" PRIxrtems_event_set " events received\n", eventout );
0418   directive_failed( status, "rtems_event_receive all events" );
0419 
0420   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 100 ticks");
0421   status = rtems_timer_fire_after(
0422     Timer_id[ 1 ],
0423     100,
0424     TA1_send_11_to_self,
0425     NULL
0426   );
0427   directive_failed( status, "rtems_timer_fire_after 100 ticks" );
0428 
0429   puts( "TA1 - rtems_event_send - sending RTEMS_EVENT_11 to self in 200 ticks");
0430   status = rtems_timer_fire_after(
0431     Timer_id[ 1 ],
0432     200,
0433     TA1_send_11_to_self,
0434     NULL
0435   );
0436   directive_failed( status, "rtems_timer_fire_after 200 ticks" );
0437 
0438   /***** *****/
0439   puts( "TA1 - rtems_event_send - send RTEMS_EVENT_4 to self" );
0440   status = rtems_event_send( RTEMS_SELF, RTEMS_EVENT_4 );
0441   directive_failed( status, "rtems_event_send" );
0442 
0443   eventout = 0;
0444   puts(
0445     "TA1 - rtems_event_receive - RTEMS_EVENT_4 AND RTEMS_EVENT_5 - UNSATISFIED"
0446   );
0447   status  = rtems_event_receive(
0448     RTEMS_EVENT_4 | RTEMS_EVENT_5,
0449     RTEMS_NO_WAIT | RTEMS_EVENT_ALL,
0450     RTEMS_NO_TIMEOUT,
0451     &eventout
0452   );
0453   fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_event_receive" );
0454   /***** *****/
0455 
0456   TEST_END();
0457   rtems_test_exit( 0 );
0458 }