source: rtems/testsuites/mptests/mp09/task1.c @ 48e02af

4.115
Last change on this file since 48e02af was a4bc4d6e, checked in by Ralf Corsepius <ralf.corsepius@…>, on 02/22/11 at 10:00:39

Add HAVE_CONFIG_H.

  • Property mode set to 100644
File size: 3.1 KB
Line 
1/*  Test_task
2 *
3 *  This task tests global message queue operations.  It also generates
4 *  an error condition.
5 *
6 *  Input parameters:
7 *    argument - task argument
8 *
9 *  Output parameters:  NONE
10 *
11 *  COPYRIGHT (c) 1989-2009.
12 *  On-Line Applications Research Corporation (OAR).
13 *
14 *  The license and distribution terms for this file may be
15 *  found in the file LICENSE in this distribution or at
16 *  http://www.rtems.com/license/LICENSE.
17 *
18 *  $Id$
19 */
20
21#ifdef HAVE_CONFIG_H
22#include "config.h"
23#endif
24
25#include "system.h"
26
27char buffer1[16] = "123456789012345";
28char buffer2[16] = "abcdefghijklmno";
29char buffer3[16] = "ABCDEFGHIJKLMNO";
30char buffer4[16] = "PQRSTUVWXYZ(){}";
31
32rtems_task Test_task(
33  rtems_task_argument argument
34)
35{
36  rtems_status_code status;
37  uint32_t          count;
38  size_t            size;
39  char              receive_buffer[16];
40
41  status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
42  directive_failed( status, "rtems_task_wake_after" );
43
44  puts( "Getting QID of message queue" );
45
46  do {
47    status = rtems_message_queue_ident(
48      Queue_name[ 1 ],
49      RTEMS_SEARCH_ALL_NODES,
50      &Queue_id[ 1 ]
51    );
52  } while ( !rtems_is_status_successful( status ) );
53
54  if ( Multiprocessing_configuration.node == 2 ) {
55    status = rtems_message_queue_delete( Queue_id[ 1 ] );
56    fatal_directive_status(
57      status,
58      RTEMS_ILLEGAL_ON_REMOTE_OBJECT,
59      "rtems_message_queue_delete"
60    );
61    puts(
62  "rtems_message_queue_delete correctly returned RTEMS_ILLEGAL_ON_REMOTE_OBJECT"
63    );
64
65    Send_messages();
66    Receive_messages();
67
68    puts( "Flushing remote empty queue" );
69    status = rtems_message_queue_flush( Queue_id[ 1 ], &count );
70    directive_failed( status, "rtems_message_queue_flush" );
71    printf( "%" PRIu32 " messages were flushed on the remote queue\n", count );
72
73    puts( "Send messages to be flushed from remote queue" );
74    status = rtems_message_queue_send( Queue_id[ 1 ], buffer1, 16 );
75    directive_failed( status, "rtems_message_queue_send" );
76
77    puts( "Flushing remote queue" );
78    status = rtems_message_queue_flush( Queue_id[ 1 ], &count );
79    directive_failed( status, "rtems_message_queue_flush" );
80    printf( "%" PRIu32 " messages were flushed on the remote queue\n", count );
81
82    puts( "Waiting for message queue to be deleted" );
83    status = rtems_message_queue_receive(
84      Queue_id[ 1 ],
85      receive_buffer,
86      &size,
87      RTEMS_DEFAULT_OPTIONS,
88      RTEMS_NO_TIMEOUT
89    );
90    fatal_directive_status(
91      status,
92      RTEMS_OBJECT_WAS_DELETED,
93      "rtems_message_queue_receive"
94    );
95    puts( "\nGlobal message queue deleted" );
96  }
97  else {                   /* node == 1 */
98    Receive_messages();
99    Send_messages();
100
101    puts( "Delaying for 5 seconds" );
102    status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() );
103    directive_failed( status, "rtems_task_wake_after" );
104
105    puts( "Deleting Message queue" );
106    status = rtems_message_queue_delete( Queue_id[ 1 ] );
107    directive_failed( status, "rtems_message_queue_delete" );
108  }
109
110  puts( "*** END OF TEST 9 ***" );
111  rtems_test_exit( 0 );
112}
Note: See TracBrowser for help on using the repository browser.