/**************************************************************************
* File name : PeriodicEventHandler.java
*
* This file is part a SCJ Level 0 and Level 1 implementation,
* based on SCJ Draft, Version 0.94 25 June 2013.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This SCJ Level 0 and Level 1 implementation is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this SCJ Level 0 and Level 1 implementation.
* If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2012
* @authors Anders P. Ravn, Aalborg University, DK
* Stephan E. Korsholm and Hans Søndergaard,
* VIA University College, DK
*************************************************************************/
package javax.safetycritical;
import javax.realtime.PeriodicParameters;
import javax.realtime.PriorityParameters;
import javax.safetycritical.annotate.SCJAllowed;
/**
* This class permits the automatic periodic execution of code.
* The <code>handleAsyncEvent</code> method behaves as if the handler were
* attached to a periodic asynchronous event. <p>
*
* This class is abstract, non-abstract sub-classes must implement the method
* <code>handleAsyncEvent</code> and may override the default <code>cleanUp</code> method.
*
* Note that the values in parameters passed to the constructors are those that will
* be used by the infrastructure. Changing these values after construction will
* have no impact on the created event handler.
*
* @version 1.2; - December 2013
*
* @author Anders P. Ravn, Aalborg University, <A
* HREF="mailto:apr@cs.aau.dk">apr@cs.aau.dk</A>, <br>
* Hans Søndergaard, VIA University College, Denmark, <A
* HREF="mailto:hso@viauc.dk">hso@via.dk</A>
*
* @scjComment
* - SCJ issue: One constructor only. <br>
* - SCJ issue: SCJ Draft says: constructor: param storage -> It must not be <code>null</code>. <br>
* An <code>IllegalArgumentException</code> is thrown if storage is null.
* But <code>ManagedEventHandler</code> does not require an
* <code>IllegalArgumentException</code> thrown if storage is null.
* It only specifies: a non-null maximum storage. This can be satisfied by implementing:
* if storage parameter is null, a default value is given. <br>
*/
@SCJAllowed
public abstract class PeriodicEventHandler extends ManagedEventHandler {
/**
* Constructs a periodic event handler.
*
* @param priority specifies the priority parameters for this periodic event handler.
* Must not be <code>null</code>.
*
* @param release specifies the periodic release parameters, in particular the start time,
* period and deadline miss handler. Note that a relative start time is not relative to now,
* rather it is relative to the point in time when initialization is finished and the timers
* are started. This argument must not be <code>null</code>.
*
* @param storage specifies the storage parameters for the periodic event handler.
* It must not be <code>null</code>.
*
* @throws IllegalArgumentException if priority, release or storage is null.
*/
/*@
public normal_behavior
requires priority != null && release != null;
ensures true;
also
public exceptional_behavior
requires priority == null;
signals (IllegalArgumentException) true;
also
public exceptional_behavior
requires release == null;
signals (IllegalArgumentException) true;
@*/
public PeriodicEventHandler(PriorityParameters priority,
PeriodicParameters release, StorageParameters storage) {
super(priority, release, storage);
}
public final void register() {
super.register();
}
}