summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Kühndel <frank.kuehndel@embedded-brains.de>2021-05-14 11:03:59 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-17 06:45:11 +0200
commitfa868b296ccd63a76da3d30c2e988a15f1d16bb5 (patch)
tree1aed6d93f36827c0c0ad5899fca4c01d8a5156b8
parentspec: Add spec for rtems_timer_server_fire_after() (diff)
downloadrtems-central-fa868b296ccd63a76da3d30c2e988a15f1d16bb5.tar.bz2
spec: Add spec for rtems_timer_server_fire_when()
Adding a specification item to rtems-central for the directive rtems_timer_server_fire_when() of the timer manager. This item uses the timer specific glossary terms, too.
-rw-r--r--spec/rtems/timer/req/server-fire-when.yml1267
1 files changed, 1267 insertions, 0 deletions
diff --git a/spec/rtems/timer/req/server-fire-when.yml b/spec/rtems/timer/req/server-fire-when.yml
new file mode 100644
index 00000000..00cbf649
--- /dev/null
+++ b/spec/rtems/timer/req/server-fire-when.yml
@@ -0,0 +1,1267 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+functional-type: action
+links:
+- role: interface-function
+ uid: ../if/server-fire-when
+post-conditions:
+- name: Status
+ states:
+ - name: Ok
+ test-code: |
+ T_rsc_success( ctx->status );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/successful:/name}.
+ - name: NotDef
+ test-code: |
+ T_rsc( ctx->status, RTEMS_NOT_DEFINED );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/not-defined:/name}
+ - name: InvId
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INVALID_ID );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/invalid-id:/name}.
+ - name: InvAddr
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/invalid-address:/name}.
+ - name: InvClock
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INVALID_CLOCK );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/invalid-clock:/name}.
+ - name: IncStat
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INCORRECT_STATE );
+ text: |
+ The return status of ${../if/server-fire-when:/name} shall be
+ ${../../status/if/incorrect-state:/name}.
+ test-epilogue: null
+ test-prologue: null
+- name: Context
+ states:
+ - name: None
+ test-code: |
+ T_eq_int( class, TIMER_DORMANT );
+ text: |
+ The timer shall have never been ${../glossary/scheduled:/term}.
+ See also ${../glossary/none:/term}.
+ - name: Interrupt
+ test-code: |
+ T_eq_int( class & TIMER_CLASS_BIT_ON_TASK, 0 );
+ text: |
+ The timer shall be in ${../glossary/interruptcontext:/term}.
+ - name: Server
+ test-code: |
+ T_eq_int( class & TIMER_CLASS_BIT_ON_TASK, TIMER_CLASS_BIT_ON_TASK );
+ text: |
+ The timer shall be in ${../glossary/servercontext:/term}.
+ - name: Nop
+ test-code: |
+ T_eq_int( class, ctx->pre_class );
+ text: |
+ Objects referenced by parameters in the past call to
+ ${../if/server-fire-when:/name} shall not be accessed by the
+ ${../if/server-fire-when:/name} call.
+ See also ${../glossary/nop:/term}.
+ test-epilogue: null
+ test-prologue: |
+ Timer_Classes class;
+ class = GetTimerClass( ctx->timer_id );
+- name: Clock
+ states:
+ - name: None
+ test-code: |
+ T_eq_int( class, TIMER_DORMANT );
+ text: |
+ The timer shall have never been ${../glossary/scheduled:/term}.
+ - name: Ticks
+ test-code: |
+ T_eq_int( class & TIMER_CLASS_BIT_TIME_OF_DAY, 0 );
+ text: |
+ The timer shall use the ${../glossary/ticksbasedclock:/term}.
+ - name: Realtime
+ test-code: |
+ T_eq_int(
+ class & TIMER_CLASS_BIT_TIME_OF_DAY,
+ TIMER_CLASS_BIT_TIME_OF_DAY
+ );
+ text: |
+ The timer shall use the ${../glossary/realtimeclock:/term}.
+ - name: Nop
+ test-code: |
+ T_eq_int( class, ctx->pre_class );
+ text: |
+ Objects referenced by parameters in the past call to
+ ${../if/server-fire-when:/name} shall not be accessed by the
+ ${../if/server-fire-when:/name} call.
+ test-epilogue: null
+ test-prologue: |
+ Timer_Classes class;
+ class = GetTimerClass( ctx->timer_id );
+- name: State
+ states:
+ - name: Scheduled
+ test-code: |
+ TriggerTimer( ctx, &ctx->tod_till_fire );
+ T_eq_int( ctx->invocations, 1 );
+ text: |
+ The timer shall be in ${../glossary/scheduled:/term}
+ ${../glossary/state:/term}.
+ - name: Nop
+ test-code: |
+ T_eq_int( ctx->post_state, ctx->pre_state );
+ text: |
+ Objects referenced by parameters in the past call to
+ ${../if/server-fire-when:/name} shall not be accessed by the
+ ${../if/server-fire-when:/name} call.
+ test-epilogue: null
+ test-prologue: null
+- name: WallTime
+ states:
+ - name: Param
+ test-code: |
+ T_eq_mem(
+ &ctx->tod_till_fire,
+ ctx->wall_time_param,
+ sizeof( ctx->tod_till_fire )
+ );
+ text: |
+ The ${../glossary/timerserviceroutine:/term} shall be invoked at the
+ wall time (see ${../glossary/realtimeclock:/term}), which was provided by
+ the ${../if/server-fire-when:/params[1]/name} parameter
+ in the past call to ${../if/server-fire-when:/name}.
+ - name: Nop
+ test-code: |
+ /*
+ * Whether the timer is scheduled has already been tested by the
+ * "Nop" "State" post-condition above.
+ */
+ T_eq_u32(
+ ctx->post_scheduling_data.interval,
+ ctx->pre_scheduling_data.interval
+ );
+ text: |
+ If and when the ${../glossary/timerserviceroutine:/term} will be invoked
+ shall not be changed by the past call to ${../if/server-fire-when:/name}.
+ test-epilogue: null
+ test-prologue: null
+- name: Routine
+ states:
+ - name: Param
+ test-code: |
+ T_eq_int( ctx->invocations, 1 );
+ text: |
+ The function reference used to invoke the
+ ${../glossary/timerserviceroutine:/term} when the timer will
+ ${../glossary/fire:/term} shall be the one provided by
+ the ${../if/server-fire-when:/params[2]/name} parameter
+ in the past call to ${../if/server-fire-when:/name}.
+ - name: Nop
+ test-code: |
+ T_eq_ptr(
+ ctx->post_scheduling_data.routine,
+ ctx->pre_scheduling_data.routine
+ );
+ text: |
+ The function reference used for any invocation of the
+ ${../glossary/timerserviceroutine:/term} shall not be changed
+ by the past call to ${../if/server-fire-when:/name}.
+ test-epilogue: null
+ test-prologue: null
+- name: UserData
+ states:
+ - name: Param
+ test-code: |
+ T_eq_ptr( ctx->routine_user_data, ctx );
+ text: |
+ The user data argument for invoking the
+ ${../glossary/timerserviceroutine:/term} when the timer will
+ ${../glossary/fire:/term} shall be the one provided by
+ the ${../if/server-fire-when:/params[3]/name} parameter
+ in the past call to ${../if/server-fire-when:/name}.
+ - name: Nop
+ test-code: |
+ T_eq_ptr(
+ ctx->post_scheduling_data.user_data,
+ ctx->pre_scheduling_data.user_data
+ );
+ text: |
+ The user data argument used for any invocation of the
+ ${../glossary/timerserviceroutine:/term} shall not be changed
+ by the past call to ${../if/server-fire-when:/name}.
+ test-epilogue: null
+ test-prologue: null
+pre-conditions:
+- name: Server
+ states:
+ - name: Init
+ test-code: |
+ rtems_status_code status;
+ status = rtems_timer_initiate_server(
+ RTEMS_TIMER_SERVER_DEFAULT_PRIORITY,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_ATTRIBUTES
+ );
+ T_rsc_success( status );
+ text: |
+ While the Timer Server task has been successfully initialized
+ by a call to ${../if/initiate-server:/name}.
+ - name: NotInit
+ test-code: |
+ DeleteTimerServer();
+ text: |
+ While the Timer Server task has not been initialized and does not exist.
+ test-epilogue: null
+ test-prologue: null
+- name: RtClock
+ states:
+ - name: Set
+ test-code: |
+ ctx->pre_cond_tod = &tod_now;
+ text: |
+ While the ${../glossary/realtimeclock:/term} is set to a valid
+ time-of-day.
+ - name: Unset
+ test-code: |
+ ctx->pre_cond_tod = NULL;
+ text: |
+ While the ${../glossary/realtimeclock:/term} has never been set.
+ test-epilogue: null
+ test-prologue: null
+- name: Routine
+ states:
+ - name: Valid
+ test-code: |
+ ctx->routine_param = TimerServiceRoutine;
+ text: |
+ While the ${../if/server-fire-when:/params[2]/name} parameter references an
+ object of type ${../if/service-routine-entry:/name}.
+ - name: 'Null'
+ test-code: |
+ ctx->routine_param = NULL;
+ text: |
+ While the ${../if/server-fire-when:/params[2]/name} parameter is
+ ${/c/if/null:/name}..
+ test-epilogue: null
+ test-prologue: null
+- name: WallTime
+ states:
+ - name: Valid
+ test-code: |
+ ctx->wall_time_param = &tod_schedule;
+ text: |
+ While the ${../if/server-fire-when:/params[1]/name} parameter is a positive
+ (greater than 0) number.
+ - name: Invalid
+ test-code: |
+ ctx->wall_time_param = &tod_invalid;
+ text: |
+ While the ${../if/server-fire-when:/params[1]/name} parameter is invalid.
+ - name: 'Null'
+ test-code: |
+ ctx->wall_time_param = NULL;
+ text: |
+ While the ${../if/server-fire-when:/params[1]/name} parameter is 0.
+ test-epilogue: null
+ test-prologue: null
+- name: Id
+ states:
+ - name: Valid
+ test-code: |
+ ctx->id_param = ctx->timer_id;
+ text: |
+ While the ${../if/server-fire-when:/params[0]/name} parameter is valid.
+ - name: Invalid
+ test-code: |
+ ctx->id_param = RTEMS_ID_NONE;
+ text: |
+ While the ${../if/server-fire-when:/params[0]/name} parameter is invalid.
+ test-epilogue: null
+ test-prologue: null
+- name: Context
+ states:
+ - name: None
+ test-code: |
+ ctx->pre_cond_contex = PRE_NONE;
+ text: |
+ While the ${../glossary/timerserviceroutine:/term} has never been
+ ${../glossary/scheduled:/term} since creation of the timer.
+ See also ${../glossary/none:/term}.
+ - name: Interrupt
+ test-code: |
+ ctx->pre_cond_contex = PRE_INTERRUPT;
+ text: |
+ While the timer is in ${../glossary/interruptcontext:/term}.
+ - name: Server
+ test-code: |
+ ctx->pre_cond_contex = PRE_SERVER;
+ text: |
+ While the timer is in ${../glossary/servercontext:/term}.
+ test-epilogue: null
+ test-prologue: null
+- name: Clock
+ states:
+ - name: None
+ test-code: |
+ T_eq_int( ctx->pre_cond_contex, PRE_NONE );
+ text: |
+ While the timer has never been ${../glossary/scheduled:/term}
+ since creation of the timer.
+ - name: Ticks
+ test-code: |
+ rtems_status_code status;
+
+ if ( ctx->pre_cond_contex == PRE_INTERRUPT ) {
+ status = rtems_timer_fire_after(
+ ctx->timer_id,
+ SCHEDULE_SOON,
+ TimerServiceRoutine,
+ ctx
+ );
+ } else {
+ status = rtems_timer_server_fire_after(
+ ctx->timer_id,
+ SCHEDULE_SOON,
+ TimerServiceRoutine,
+ ctx
+ );
+ }
+ T_rsc_success( status );
+ text: |
+ While the ${../glossary/clock:/term} used to determine when the timer
+ will ${../glossary/fire:/term} is the
+ ${../glossary/ticksbasedclock:/term}.
+ - name: Realtime
+ test-code: |
+ rtems_status_code status;
+ T_rsc_success( rtems_clock_set( &tod_now ) );
+
+ if ( ctx->pre_cond_contex == PRE_INTERRUPT ) {
+ status = rtems_timer_fire_when(
+ ctx->timer_id,
+ &tod_schedule,
+ TimerServiceRoutine,
+ ctx
+ );
+ } else {
+ status = rtems_timer_server_fire_when(
+ ctx->timer_id,
+ &tod_schedule,
+ TimerServiceRoutine,
+ ctx
+ );
+ }
+ T_rsc_success( status );
+ text: |
+ While the ${../glossary/clock:/term} used to determine when the timer
+ will ${../glossary/fire:/term} is the ${../glossary/realtimeclock:/term}.
+ test-epilogue: null
+ test-prologue: null
+- name: State
+ states:
+ - name: Inactive
+ test-code: |
+ TriggerTimer( ctx, NULL );
+ T_eq_int(
+ ctx->invocations,
+ ( ctx->pre_cond_contex == PRE_NONE ) ? 0 : 1
+ );
+ ctx->invocations = 0;
+ ctx->pre_state = TIMER_INACTIVE;
+ text: |
+ While the timer is in ${../glossary/inactive:/term}
+ ${../glossary/state:/term}.
+ - name: Scheduled
+ test-code: |
+ /* The timer was already scheduled in the "Clock" pre-conditions. */
+ ctx->pre_state = TIMER_SCHEDULED;
+ text: |
+ While the timer is in ${../glossary/scheduled:/term}
+ ${../glossary/state:/term}.
+ - name: Pending
+ test-code: |
+ T_rsc_success( rtems_task_suspend( GetTimerServerTaskId() ) );
+ TriggerTimer( ctx, NULL );
+ T_eq_int( ctx->invocations, 0 );
+ ctx->pre_state = TIMER_PENDING;
+ text: |
+ While the timer is in ${../glossary/pending:/term}
+ ${../glossary/state:/term}.
+ test-epilogue: null
+ test-prologue: null
+rationale: null
+references: []
+requirement-type: functional
+skip-reasons:
+ NotExist: |
+ The pre-condition combination of ${../glossary/context:/term},
+ ${../glossary/clock:/term} and ${../glossary/state:/term} cannot be
+ produced and does therefore not exist.
+ ClockNotSet: |
+ When the ${../glossary/realtimeclock:/term} is not set, the timer
+ cannot be in pre-condition *Clock* *Realtime* because it is not
+ possible to call the directives ${../if/fire-when:/name} or
+ ${../if/server-fire-when:/name} with ${/glossary/statuscode:/term}
+ ${../../status/if/successful:/name}.
+ NoServer: |
+ If the server task is not initialized, the timer cannot be in
+ ${../glossary/servercontext:/term}.
+test-action: |
+ GetTimerSchedulingData( ctx->timer_id, &ctx->pre_scheduling_data );
+ ctx->pre_class = GetTimerClass( ctx->timer_id );
+ if ( ctx->pre_cond_tod == NULL ) {
+ UnsetClock();
+ } else {
+ T_rsc_success( rtems_clock_set( ctx->pre_cond_tod ) );
+ }
+ ctx->status = rtems_timer_server_fire_when(
+ ctx->id_param,
+ ctx->wall_time_param,
+ ctx->routine_param,
+ ctx
+ );
+ ctx->post_state = GetTimerState( ctx->timer_id );
+ GetTimerSchedulingData( ctx->timer_id, &ctx->post_scheduling_data );
+ /* Ignoring return status: the timer server task may be suspended or not. */
+ rtems_task_resume( GetTimerServerTaskId() );
+test-brief: null
+test-cleanup: |
+ T_rsc_success( rtems_timer_delete( ctx->timer_id ) );
+ DeleteTimerServer();
+test-context:
+- brief: |
+ This member contains a valid id of a timer.
+ description: null
+ member: |
+ rtems_id timer_id
+- brief: |
+ This member specifies the ${../if/server-fire-when:/params[0]/name} parameter
+ for the action.
+ description: null
+ member: |
+ rtems_id id_param
+- brief: |
+ This member specifies the ${../if/server-fire-when:/params[1]/name} parameter
+ for the action.
+ description: null
+ member: |
+ const rtems_time_of_day *wall_time_param
+- brief: |
+ This member specifies the ${../if/server-fire-when:/params[2]/name} parameter
+ for the action.
+ description: null
+ member: |
+ rtems_timer_service_routine_entry routine_param
+- brief: |
+ This member contains the returned ${/glossary/statuscode:/term}
+ of the action.
+ description: null
+ member: |
+ rtems_status_code status
+- brief: |
+ This member contains a counter of invocations of
+ the ${../glossary/timerserviceroutine:/term}.
+ description: null
+ member: |
+ int invocations
+- brief: |
+ Function TriggerTimer() is used to figure out when the
+ ${../glossary/timerserviceroutine:/term} gets executed.
+ This member contains the time-of-day when the
+ ${../glossary/timerserviceroutine:/term} fires (see
+ ${../glossary/fire:/term}).
+ description: null
+ member: |
+ rtems_time_of_day tod_till_fire
+- brief: |
+ This member contains the user data given to the
+ ${../glossary/timerserviceroutine:/term} when called.
+ description: null
+ member: |
+ void *routine_user_data
+- brief: |
+ This member specifies which pre-condition ${../glossary/context:/term}
+ (${../glossary/none:/term}, ${../glossary/interruptcontext:/term},
+ ${../glossary/servercontext:/term}) must be created before the
+ ${../if/server-fire-when:/name} action gets executed.
+ description: null
+ member: |
+ PreConditionContext pre_cond_contex
+- brief: |
+ This member specifies the pre-condition state of the
+ ${../glossary/realtimeclock:/term}. It should either be set to the
+ value referenced by pre_cond_tod or if ${/c/if/null:/name}, then the
+ ${../glossary/realtimeclock:/term} should be not set.
+ description: null
+ member: |
+ const rtems_time_of_day *pre_cond_tod
+- brief: |
+ This member stores internal ${../glossary/clock:/term} and
+ ${../glossary/context:/term} settings of the timer before
+ the execution of the test action.
+ description: null
+ member: |
+ Timer_Classes pre_class
+- brief: |
+ This member stores the ${../glossary/state:/term} of the timer before
+ the execution of the test action.
+ description: null
+ member: |
+ Timer_States pre_state
+- brief: |
+ This member stores the ${../glossary/state:/term} of the timer after
+ the execution of the test action.
+ description: null
+ member: |
+ Timer_States post_state
+- brief: |
+ This member stores the scheduling data of the timer before
+ the execution of the test action.
+ description: null
+ member: |
+ Timer_Scheduling_Data pre_scheduling_data
+- brief: |
+ This member stores the scheduling data of the timer after
+ the execution of the test action.
+ description: null
+ member: |
+ Timer_Scheduling_Data post_scheduling_data
+test-context-support: |
+ typedef enum {
+ PRE_NONE = 0,
+ PRE_INTERRUPT = 1,
+ PRE_SERVER = 2
+ } PreConditionContext;
+
+ typedef enum {
+ SCHEDULE_NONE = 0,
+ SCHEDULE_SOON = 1,
+ SCHEDULE_MAX = 5
+ } Scheduling_Ticks;
+test-description: null
+test-header: null
+test-includes:
+- rtems.h
+test-local-includes:
+- tx-support.h
+test-prepare: |
+ rtems_status_code status;
+ status = rtems_timer_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ &ctx->timer_id
+ );
+ T_rsc_success( status );
+
+ ctx->invocations = 0;
+ ctx->routine_user_data = NULL;
+test-setup: null
+test-stop: null
+test-support: |
+ static const rtems_time_of_day tod_now = { 2000, 1, 1, 0, 0, 0, 0 };
+ static const rtems_time_of_day tod_schedule = { 2000, 1, 1, 5, 0, 0, 0 };
+ static const rtems_time_of_day tod_invalid = { 1985, 1, 1, 0, 0, 0, 0 };
+
+ static void TriggerTimer(
+ const RtemsTimerReqServerFireWhen_Context *ctx,
+ rtems_time_of_day *tod_fire
+ )
+ {
+ rtems_time_of_day tod = tod_now;
+ int invocations_old = ctx->invocations;
+ int i;
+
+ /* Fire the timer service routine for ticks and realtime clock */
+ for ( i = 1; i <= SCHEDULE_MAX; ++i ) {
+ ClockTick();
+ }
+
+ for ( i = 1; i < 24; ++i ) {
+ tod.hour = i;
+ T_rsc_success( rtems_clock_set( &tod ) );
+ if ( tod_fire != NULL && ctx->invocations > invocations_old ) {
+ *tod_fire = tod;
+ break;
+ }
+ }
+ }
+
+ RTEMS_INLINE_ROUTINE void TimerServiceRoutine(
+ rtems_id timer_id,
+ void *user_data
+ )
+ {
+ RtemsTimerReqServerFireWhen_Context *ctx = user_data;
+ ++( ctx->invocations );
+ ctx->routine_user_data = user_data;
+ }
+test-target: testsuites/validation/tc-timer-server-fire-when.c
+test-teardown:
+ brief: Make sure the ${../glossary/realtimeclock:/term} is not set
+ after this test.
+ code: |
+ UnsetClock();
+ description: null
+text: ${.:text-template}
+transition-map:
+- enabled-by: true
+ post-conditions:
+ Status: Ok
+ Context: Server
+ Clock: Realtime
+ State: Scheduled
+ WallTime: Param
+ Routine: Param
+ UserData: Param
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Valid
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: Ok
+ Context: Server
+ Clock: Realtime
+ State: Scheduled
+ WallTime: Param
+ Routine: Param
+ UserData: Param
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Valid
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: Ok
+ Context: Server
+ Clock: Realtime
+ State: Scheduled
+ WallTime: Param
+ Routine: Param
+ UserData: Param
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Valid
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions: NotExist
+ pre-conditions:
+ Server: all
+ RtClock: all
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Scheduled
+ - Pending
+- enabled-by: true
+ post-conditions: NotExist
+ pre-conditions:
+ Server: all
+ RtClock: all
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - None
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions: NotExist
+ pre-conditions:
+ Server: all
+ RtClock: all
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ - Server
+ Clock:
+ - None
+ State: all
+- enabled-by: true
+ post-conditions: NotExist
+ pre-conditions:
+ Server: all
+ RtClock:
+ - Set
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Pending
+- enabled-by: true
+ post-conditions: NotExist
+ pre-conditions:
+ Server: all
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ State:
+ - Pending
+- enabled-by: true
+ post-conditions: NoServer
+ pre-conditions:
+ Server:
+ - NotInit
+ RtClock: all
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions: ClockNotSet
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ - Server
+ Clock:
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions: ClockNotSet
+ pre-conditions:
+ Server:
+ - NotInit
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: NotDef
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: NotDef
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: NotDef
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: InvId
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Invalid
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: InvId
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Invalid
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: InvId
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Valid
+ Id:
+ - Invalid
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - 'Null'
+ WallTime:
+ - Valid
+ - Invalid
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - 'Null'
+ WallTime:
+ - Valid
+ - Invalid
+ Id: all
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - 'Null'
+ WallTime:
+ - Valid
+ - Invalid
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: InvClock
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Invalid
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: InvClock
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Invalid
+ Id: all
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: InvClock
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine:
+ - Valid
+ WallTime:
+ - Invalid
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine: all
+ WallTime:
+ - 'Null'
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine: all
+ WallTime:
+ - 'Null'
+ Id: all
+ Context:
+ - Server
+ Clock:
+ - Ticks
+ - Realtime
+ State: all
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - Init
+ RtClock:
+ - Set
+ Routine: all
+ WallTime:
+ - 'Null'
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: IncStat
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - NotInit
+ RtClock: all
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - None
+ Clock:
+ - None
+ State:
+ - Inactive
+- enabled-by: true
+ post-conditions:
+ Status: IncStat
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - NotInit
+ RtClock:
+ - Set
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ - Realtime
+ State:
+ - Inactive
+ - Scheduled
+- enabled-by: true
+ post-conditions:
+ Status: IncStat
+ Context: Nop
+ Clock: Nop
+ State: Nop
+ WallTime: Nop
+ Routine: Nop
+ UserData: Nop
+ pre-conditions:
+ Server:
+ - NotInit
+ RtClock:
+ - Unset
+ Routine: all
+ WallTime: all
+ Id: all
+ Context:
+ - Interrupt
+ Clock:
+ - Ticks
+ State:
+ - Inactive
+ - Scheduled
+type: requirement