summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp52/sp52impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/sptests/sp52/sp52impl.h')
-rw-r--r--testsuites/sptests/sp52/sp52impl.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/testsuites/sptests/sp52/sp52impl.h b/testsuites/sptests/sp52/sp52impl.h
new file mode 100644
index 0000000000..801a0b8754
--- /dev/null
+++ b/testsuites/sptests/sp52/sp52impl.h
@@ -0,0 +1,139 @@
+/*
+ * Based upon test code posted on the RTEMS User's Mailing List
+ * by Sergio Faustino <sergio.faustino@edisoft.pt>:
+ *
+ * http://www.rtems.org/pipermail/rtems-users/2009-June/005540.html
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if defined(USE_TIMER_SERVER)
+ #define TEST_NUMBER "53"
+ #define TSR_MODE "Server"
+ #define FIRE_WHEN rtems_timer_server_fire_when
+ #define FIRE_WHEN_STRING "rtems_timer_server_fire_when"
+#else
+ #define TEST_NUMBER "52"
+ #define TSR_MODE "Interrupt"
+ #define FIRE_WHEN rtems_timer_fire_when
+ #define FIRE_WHEN_STRING "rtems_timer_fire_when"
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tmacros.h>
+#include <string.h>
+
+const char rtems_test_name[] = "SP " TEST_NUMBER;
+
+#define INITIAL_YEAR 2009
+
+static bool _timer_passage;
+
+static rtems_time_of_day time_to_fire;
+
+/*timer Routine*/
+static rtems_timer_service_routine TIMER_service_routine(
+ rtems_id ignored_id,
+ void *user_data
+)
+{
+ rtems_status_code status;
+ rtems_time_of_day now;
+
+ _timer_passage = true;
+
+ memset( &now, 0, sizeof( now ) );
+
+ status = rtems_clock_get_tod( &now );
+ rtems_test_assert( status == RTEMS_SUCCESSFUL );
+ rtems_test_assert( memcmp( &now, &time_to_fire, sizeof( now ) ) == 0 );
+}
+
+static rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_id timer_id;
+ rtems_name timer_name;
+
+ rtems_time_of_day global_time;
+
+ TEST_BEGIN();
+
+ /* build timer name*/
+ timer_name = rtems_build_name('T', 'M', '1', ' ');
+
+ /* create Timer */
+ status = rtems_timer_create(timer_name, &timer_id);
+ directive_failed( status, "rtems_timer_create" );
+
+ #if defined(USE_TIMER_SERVER)
+ /* initiate timer server */
+ status = rtems_timer_initiate_server(
+ RTEMS_MINIMUM_PRIORITY,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_ATTRIBUTES
+ );
+ directive_failed( status, "rtems_timer_initiate_server" );
+ #endif
+
+ /* Set system clock */
+ build_time(&global_time, 6, 8, INITIAL_YEAR, 16, 5, 13, 0);
+ status = rtems_clock_set(&global_time);
+ directive_failed( status, "rtems_clock_set" );
+
+ /* Set Timer to Fire */
+ /* build fire times */
+ time_to_fire = global_time;
+
+ /* only diferent second */
+ time_to_fire.year = INITIAL_YEAR + 5;
+
+ status = FIRE_WHEN(
+ timer_id,
+ &time_to_fire,
+ TIMER_service_routine,
+ (void*) NULL
+ );
+ directive_failed( status, FIRE_WHEN_STRING );
+
+ /* Set system clock FORWARD */
+ global_time.year = time_to_fire.year;
+ status = rtems_clock_set(&global_time);
+
+ if (!_timer_passage) {
+ puts( TSR_MODE " Timer FAILED to fire after setting time forward");
+ rtems_test_exit(0);
+ }
+
+ puts( TSR_MODE " Timer fired after setting time forward -- OK");
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+/* configuration stuff */
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 50000
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_TIMERS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT_TASK_PRIORITY (RTEMS_MINIMUM_PRIORITY + 1)
+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>