package javax.safetycritical.test.cyclic;
import javax.realtime.PeriodicParameters;
import javax.realtime.PriorityParameters;
import javax.realtime.RelativeTime;
import javax.safetycritical.CyclicExecutive;
import javax.safetycritical.CyclicSchedule;
import javax.safetycritical.Frame;
import javax.safetycritical.PeriodicEventHandler;
import javax.scj.util.Const;
import javax.scj.util.Priorities;
public class CyclicExecutiveStub extends CyclicExecutive
{
public void initialize()
{
PeriodicEventHandler pevh2 = new PeriodicEvhStub(
new PriorityParameters(Priorities.MIN_PRIORITY),
new PeriodicParameters(new RelativeTime (), // start
new RelativeTime (2*TestCyclicExecutive.minorCycle, 0)), // period
TestCyclicExecutive.storageParameters_Handlers,
2);
pevh2.register();
PeriodicEventHandler pevh3 = new PeriodicEvhStub(
new PriorityParameters(Priorities.MIN_PRIORITY),
new PeriodicParameters(new RelativeTime (), // start
new RelativeTime (3*TestCyclicExecutive.minorCycle, 0)), // period
TestCyclicExecutive.storageParameters_Handlers,
3);
pevh3.register();
PeriodicEventHandler pevh6 = new PeriodicEvhStub(
new PriorityParameters(Priorities.MIN_PRIORITY),
new PeriodicParameters(new RelativeTime (), // start
new RelativeTime (6*TestCyclicExecutive.minorCycle, 0)), // period
TestCyclicExecutive.storageParameters_Handlers,
6);
pevh6.register();
}
public long missionMemorySize ()
{
return Const.MISSION_MEM;
}
public CyclicSchedule getSchedule (PeriodicEventHandler[] handlers)
{
RelativeTime duration = new RelativeTime (TestCyclicExecutive.minorCycle, 0);
return generateCyclicSchedule (handlers, duration);
}
private CyclicSchedule generateCyclicSchedule (
PeriodicEventHandler[] handlers, RelativeTime duration)
{
Frame[] frames = new Frame[6];
PeriodicEventHandler[] frame0 = new PeriodicEventHandler[2];
PeriodicEventHandler[] frame1 = new PeriodicEventHandler[1];
PeriodicEventHandler[] frame2 = new PeriodicEventHandler[1];
PeriodicEventHandler[] frame3 = new PeriodicEventHandler[0];
PeriodicEventHandler[] frame4 = new PeriodicEventHandler[2];
PeriodicEventHandler[] frame5 = new PeriodicEventHandler[0];
frame0[0] = handlers[2];
frame0[1] = handlers[0];
frame1[0] = handlers[1];
frame2[0] = handlers[0];
frame4[0] = handlers[0];
frame4[1] = handlers[1];
frames[0] = new Frame (duration, frame0);
frames[1] = new Frame (duration, frame1);
frames[2] = new Frame (duration, frame2);
frames[3] = new Frame (duration, frame3);
frames[4] = new Frame (duration, frame4);
frames[5] = new Frame (duration, frame5);
return new CyclicSchedule (frames);
}
/*@
public behaviour
requires true;
// evh6.time < evh2.time < evh3.time < evh2.time < evh2.time < evh3.time
ensures TestCyclicExecutive.timeRecord[0] < TestCyclicExecutive.timeRecord[1];
// (\forall int i; 0 < i && i < SIZE-2; timeRecord[i] < timeRecord[i + 1]);
// // frame 0
// ensures (timeRecord[1] - timeRecord[0] <= 1* minorCycleInNanos);
// // frame 1
// ensures (timeRecord[3] - timeRecord[0] <= 2* minorCycleInNanos);
// // frame 2
// ensures (timeRecord[4] - timeRecord[0] <= 3* minorCycleInNanos);
// // frame 4
// ensures (timeRecord[5] - timeRecord[0] <= 5* minorCycleInNanos);
// ensures (timeRecord[6] - timeRecord[0] <= 5* minorCycleInNanos);
@*/
public boolean cleanUp()
{
super.cleanUp();
System.out.println("\nMissionStub.cleanUp: ... \n");
for (int i = 0; i < 6; i++)
System.out.println ( " " + TestCyclicExecutive.timeRecord[i]);
// // starttime < evh6.time < evh2.time < evh3.time < evh2.time < evh2.time < evh3.time
// for (int i = 0; i < 6; i++) {
// if (timeRecord[i] > timeRecord[i + 1])
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
// }
// // frame 0
// if (timeRecord[1] - timeRecord[0] > 1* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
// if (timeRecord[2] - timeRecord[0] > 1* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
//
// // frame 1
// if (timeRecord[3] - timeRecord[0] > 2* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
//
// // frame 2
// if (timeRecord[4] - timeRecord[0] > 3* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
//
// // frame 4
// if (timeRecord[5] - timeRecord[0] > 5* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
// if (timeRecord[6] - timeRecord[0] > 5* minorCycleInNanos)
// AllTests.result.addError(AllTests.test_CyclicExecutive, new AssertionError());
return true;
}
}