/************************************************************************** * File name: AperiodicEventHandler.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.AperiodicParameters; import javax.realtime.PriorityParameters; import javax.safetycritical.annotate.Level; import javax.safetycritical.annotate.Phase; import javax.safetycritical.annotate.SCJAllowed; import javax.safetycritical.annotate.SCJRestricted; /** * This class permits the explicit release of application code. * Concrete subclasses must implement the <code>handleAsyncEvent</code> method * and may override the default <code>cleanUp</code> method. <br> * * 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> */ @SCJAllowed(Level.LEVEL_1) public abstract class AperiodicEventHandler extends ManagedEventHandler { /** * The scheduler that releases the handler. */ private PriorityScheduler sch; /** * Constructs an aperiodic event handler that can be explicitly released. * * @param priority is the priority parameters for this aperiodic event handler; it must not be null. * @param release is the release parameters for this aperiodic event handler; it must not be null. * @param storage is the <code>StorageParameters</code> for this aperiodic event handler. * * @throws <code>IllegalArgumentException</code> if <code>priority</code> or <code> release</code> 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; @*/ @SCJAllowed(Level.LEVEL_1) @SCJRestricted(Phase.INITIALIZE) public AperiodicEventHandler(PriorityParameters priority, AperiodicParameters release, StorageParameters storage) { super(priority, release, storage); if (priority == null || release == null) throw new IllegalArgumentException("null argument"); } @SCJAllowed(Level.INFRASTRUCTURE) @SCJRestricted(Phase.INITIALIZE) public final void register() { super.register(); sch = PriorityScheduler.instance(); } /** * Release this aperiodic event handler */ /*@ public behavior // requires MissionSequencer.getPhase() == Phase.EXECUTE; requires Mission.getMission().isRegistered(this); // ensures MissionSequencer.getPhase() == Phase.EXECUTE; ensures Mission.getMission().isRegistered(this); // ensures PriorityScheduler.activated(this); @*/ @SCJAllowed public final void release() { sch.release(this); } }