Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  * Copyright (c) 2012 embedded brains GmbH & Co. KG
0005  *
0006  * Redistribution and use in source and binary forms, with or without
0007  * modification, are permitted provided that the following conditions
0008  * are met:
0009  * 1. Redistributions of source code must retain the above copyright
0010  *    notice, this list of conditions and the following disclaimer.
0011  * 2. Redistributions in binary form must reproduce the above copyright
0012  *    notice, this list of conditions and the following disclaimer in the
0013  *    documentation and/or other materials provided with the distribution.
0014  *
0015  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0016  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0017  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0018  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0019  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0020  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0021  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0024  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0025  * POSSIBILITY OF SUCH DAMAGE.
0026  */
0027 
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031 
0032 #include <rtems.h>
0033 
0034 #include "tmacros.h"
0035 
0036 const char rtems_test_name[] = "SPEVENTSYSTEM 1";
0037 
0038 #define EVENT RTEMS_EVENT_0
0039 
0040 static void test_with_normal_and_system_event(void)
0041 {
0042   rtems_status_code sc;
0043   rtems_event_set out;
0044 
0045   /* Assert no events pending */
0046 
0047   sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0048   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0049 
0050   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0051   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0052 
0053   /* Send system event */
0054 
0055   sc = rtems_event_system_send(rtems_task_self(), EVENT);
0056   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0057 
0058   sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0059   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0060 
0061   out = 0;
0062   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0063   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0064   rtems_test_assert(out == EVENT);
0065 
0066   /* Send normal event */
0067 
0068   sc = rtems_event_send(rtems_task_self(), EVENT);
0069   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0070 
0071   out = 0;
0072   sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0073   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0074   rtems_test_assert(out == EVENT);
0075 
0076   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0077   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0078 }
0079 
0080 static void test_with_timeout(void)
0081 {
0082   rtems_status_code sc;
0083   rtems_event_set out;
0084 
0085   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0086   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0087 
0088   sc = rtems_event_system_receive(EVENT, RTEMS_WAIT, 1, &out);
0089   rtems_test_assert(sc == RTEMS_TIMEOUT);
0090 
0091   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
0092   rtems_test_assert(sc == RTEMS_UNSATISFIED);
0093 }
0094 
0095 static void test_with_invalid_receiver(void)
0096 {
0097   rtems_status_code sc;
0098 
0099   sc = rtems_event_system_send(0xffff, EVENT);
0100   rtems_test_assert(sc == RTEMS_INVALID_ID);
0101 }
0102 
0103 static void test_with_invalid_address(void)
0104 {
0105   rtems_status_code sc;
0106 
0107   sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, NULL);
0108   rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
0109 }
0110 
0111 static void test_get_pending_events(void)
0112 {
0113   rtems_status_code sc;
0114   rtems_event_set out;
0115 
0116   sc = rtems_event_system_receive(
0117     RTEMS_PENDING_EVENTS,
0118     RTEMS_NO_WAIT,
0119     0,
0120     &out
0121   );
0122   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0123   rtems_test_assert(out == 0);
0124 }
0125 
0126 static void Init(rtems_task_argument arg)
0127 {
0128   TEST_BEGIN();
0129 
0130   test_with_normal_and_system_event();
0131   test_with_timeout();
0132   test_with_invalid_receiver();
0133   test_with_invalid_address();
0134   test_get_pending_events();
0135 
0136   TEST_END();
0137 
0138   rtems_test_exit(0);
0139 }
0140 
0141 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0142 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0143 
0144 #define CONFIGURE_MAXIMUM_TASKS 2
0145 
0146 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0147 
0148 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0149 
0150 #define CONFIGURE_INIT
0151 
0152 #include <rtems/confdefs.h>