/**************************************************************************
* File name: Services.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.AbsoluteTime;
import javax.realtime.Clock;
import javax.safetycritical.annotate.Level;
import javax.safetycritical.annotate.SCJAllowed;
/**
* This class provides a collection of static helper methods.
*
* @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
public class Services {
@SCJAllowed
public static void captureBackTrace(Throwable association) {
// not implemented
}
/**
*
* @return The current schedulable object.
*/
@SCJAllowed
public static ManagedSchedulable currentManagedSchedulable() {
// not tested
if (Launcher.level == 0)
return CyclicScheduler.instance().seq;
else
return PriorityScheduler.instance().current.getTarget();
}
// @SCJAllowed
// public static Level getDeploymentLevel()
// {
// if (Launcher.level == 0)
// return Level.LEVEL_0;
// if (Launcher.level == 1)
// return Level.LEVEL_1;
// }
@SCJAllowed(Level.LEVEL_1)
public static int getDefaultCeiling() {
return PriorityScheduler.instance().getMaxPriority();
}
@SCJAllowed(Level.LEVEL_1)
public static void setCeiling(Object target, int ceiling) {
Monitor monitor = new Monitor(ceiling);
monitor.attach(target);
//devices.Console.println("Services.setCeiling");
}
@SCJAllowed(Level.LEVEL_0)
public static void nanoSpin(int nanos) // Busy waiting
{
// not tested
Clock clock = Clock.getRealtimeClock();
AbsoluteTime time = new AbsoluteTime();
AbsoluteTime next = new AbsoluteTime();
clock.getTime(time);
time.add(0, nanos, next);
while (time.compareTo(next) < 0) // time < next
{
clock.getTime(time);
}
}
}