Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*  Test_task
0004  *
0005  *  This task either continuously sends events to a remote task, or
0006  *  continuously receives events sent by a remote task.  This decision
0007  *  is based upon the local node number.
0008  *
0009  *  Input parameters:
0010  *    argument - task argument
0011  *
0012  *  Output parameters:  NONE
0013  *
0014  *  COPYRIGHT (c) 1989-2009.
0015  *  On-Line Applications Research Corporation (OAR).
0016  *
0017  * Redistribution and use in source and binary forms, with or without
0018  * modification, are permitted provided that the following conditions
0019  * are met:
0020  * 1. Redistributions of source code must retain the above copyright
0021  *    notice, this list of conditions and the following disclaimer.
0022  * 2. Redistributions in binary form must reproduce the above copyright
0023  *    notice, this list of conditions and the following disclaimer in the
0024  *    documentation and/or other materials provided with the distribution.
0025  *
0026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0036  * POSSIBILITY OF SUCH DAMAGE.
0037  */
0038 
0039 #ifdef HAVE_CONFIG_H
0040 #include "config.h"
0041 #endif
0042 
0043 #include "system.h"
0044 
0045 rtems_task Test_task(
0046   rtems_task_argument argument
0047 )
0048 {
0049   rtems_status_code status;
0050   uint32_t    count;
0051   uint32_t    remote_node;
0052   rtems_id          remote_tid;
0053   rtems_event_set   event_out;
0054 
0055   remote_node = ((rtems_object_get_local_node() == 1) ? 2 : 1);
0056 
0057   puts( "About to go to sleep!" );
0058   status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
0059   directive_failed( status, "rtems_task_wake_after" );
0060   puts( "Waking up!" );
0061 
0062   puts_nocr( "Remote task's name is : " );
0063   put_name( Task_name[ remote_node ], TRUE );
0064 
0065   puts( "Getting TID of remote task" );
0066   while ( FOREVER ) {
0067     status = rtems_task_ident(
0068       Task_name[ remote_node ],
0069       RTEMS_SEARCH_ALL_NODES,
0070       &remote_tid
0071     );
0072 
0073     if ( status == RTEMS_SUCCESSFUL )
0074       break;
0075     puts( "rtems_task_ident FAILED!!" );
0076     rtems_task_wake_after(2);
0077   }
0078 
0079   if ( rtems_object_get_local_node() == 1 ) {
0080     puts( "Sending events to remote task" );
0081     while ( Stop_Test == false ) {
0082       for ( count=EVENT_TASK_DOT_COUNT; Stop_Test == false && count; count-- ) {
0083         status = rtems_event_send( remote_tid, RTEMS_EVENT_16 );
0084         directive_failed( status, "rtems_event_send" );
0085      }
0086      put_dot( 'e' );
0087     }
0088   }
0089 
0090   puts( "Receiving events from remote task" );
0091   while ( Stop_Test == false ) {
0092     for ( count=EVENT_TASK_DOT_COUNT ; Stop_Test == false && count ; count-- ) {
0093       status = rtems_event_receive(
0094         RTEMS_EVENT_16,
0095         RTEMS_DEFAULT_OPTIONS,
0096         RTEMS_NO_TIMEOUT,
0097         &event_out
0098       );
0099       directive_failed( status, "rtems_event_receive" );
0100     }
0101     put_dot( 'e' );
0102   }
0103 
0104   Exit_test();
0105 }