File indexing completed on 2025-05-11 08:24:46
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
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[] = "SPEVENTTRANSIENT 1";
0037
0038 typedef struct {
0039 rtems_id client;
0040 bool complete;
0041 } request;
0042
0043 static void server_task(rtems_task_argument arg)
0044 {
0045 rtems_status_code sc;
0046 request *req = (request *) arg;
0047
0048 req->complete = true;
0049
0050 sc = rtems_event_transient_send(req->client);
0051 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0052
0053 rtems_task_exit();
0054 }
0055
0056 static void test_with_request_server(void)
0057 {
0058 rtems_status_code sc;
0059 rtems_id id;
0060 request req;
0061
0062 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0063 rtems_test_assert(sc == RTEMS_UNSATISFIED);
0064
0065 req.client = rtems_task_self();
0066 req.complete = false;
0067
0068 sc = rtems_task_create(
0069 rtems_build_name('S', 'E', 'R', 'V'),
0070 1,
0071 RTEMS_MINIMUM_STACK_SIZE,
0072 RTEMS_DEFAULT_MODES,
0073 RTEMS_DEFAULT_ATTRIBUTES,
0074 &id
0075 );
0076 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0077
0078 sc = rtems_task_start(id, server_task, (rtems_task_argument) &req);
0079 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0080
0081 sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
0082 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0083
0084 rtems_test_assert(req.complete);
0085 }
0086
0087 static void test_with_request_self(void)
0088 {
0089 rtems_status_code sc;
0090
0091 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0092 rtems_test_assert(sc == RTEMS_UNSATISFIED);
0093
0094 sc = rtems_event_transient_send(rtems_task_self());
0095 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0096
0097 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0098 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0099
0100 rtems_event_transient_clear();
0101
0102 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0103 rtems_test_assert(sc == RTEMS_UNSATISFIED);
0104 }
0105
0106 static void test_with_timeout(void)
0107 {
0108 rtems_status_code sc;
0109
0110 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0111 rtems_test_assert(sc == RTEMS_UNSATISFIED);
0112
0113 sc = rtems_event_transient_receive(RTEMS_WAIT, 1);
0114 rtems_test_assert(sc == RTEMS_TIMEOUT);
0115
0116 sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
0117 rtems_test_assert(sc == RTEMS_UNSATISFIED);
0118 }
0119
0120 static void Init(rtems_task_argument arg)
0121 {
0122 TEST_BEGIN();
0123
0124 test_with_request_server();
0125 test_with_request_self();
0126 test_with_timeout();
0127
0128 TEST_END();
0129
0130 rtems_test_exit(0);
0131 }
0132
0133 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0134 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0135
0136 #define CONFIGURE_MAXIMUM_TASKS 2
0137
0138 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0139
0140 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0141
0142 #define CONFIGURE_INIT
0143
0144 #include <rtems/confdefs.h>