package libcsp.csp.app.ping; import javax.realtime.PeriodicParameters; import javax.realtime.PriorityParameters; import javax.realtime.RelativeTime; import javax.safetycritical.LinearMissionSequencer; import javax.safetycritical.Mission; import javax.safetycritical.MissionSequencer; import javax.safetycritical.Safelet; import javax.safetycritical.StorageParameters; import javax.safetycritical.annotate.Level; import javax.safetycritical.annotate.Phase; import javax.safetycritical.annotate.SCJAllowed; import javax.safetycritical.annotate.SCJRestricted; import libcsp.csp.ImmortalEntry; import libcsp.csp.app.CSPGenericMission; import libcsp.csp.interfaces.InterfaceI2C_A; import libcsp.csp.interfaces.InterfaceI2C_B; public class PingMission extends CSPGenericMission implements Safelet<Mission> { /* Safelet methods */ @Override @SCJAllowed(Level.SUPPORT) @SCJRestricted(phase = Phase.INITIALIZATION) public void initializeApplication() { ImmortalEntry.setup(); } @Override @SCJAllowed(Level.SUPPORT) @SCJRestricted(phase = Phase.INITIALIZATION) public MissionSequencer<Mission> getSequencer() { return new LinearMissionSequencer<Mission>(new PriorityParameters(20), new StorageParameters(8000, null), false, this); } @Override @SCJAllowed(Level.SUPPORT) public long immortalMemorySize() { return 10000; } /* Mission methods */ @Override @SCJAllowed(Level.SUPPORT) protected void initialize() { /* Get the I2C interface objects */ InterfaceI2C_A interfaceI2C_A = InterfaceI2C_A.getInterface(); InterfaceI2C_B interfaceI2C_B = InterfaceI2C_B.getInterface(); /* I2C MAC address is the device address */ interfaceI2C_A.initialize(ImmortalEntry.NODE_ADDRESS); interfaceI2C_B.initialize(0); /* Initialize router task, interrupt tasks, and Loopback route */ init((byte) ImmortalEntry.NODE_ADDRESS, 2, interfaceI2C_B); /* Add a route to a node through I2C interface */ manager.routeSet(1, interfaceI2C_A, 1); /* Initialize application specific handlers */ initializePingHandler(5); } @Override @SCJAllowed public long missionMemorySize() { // TODO Auto-generated method stub return 0; } private void initializePingHandler(int priority) { final int PING_HANDLER_BACKING_STORE_SIZE_IN_BYTES = 1024; final int PING_HANDLER_SCOPE_SIZE_IN_BYTES = 800; final int PING_HANDLER_RELEASE_PERIOD_IN_MS = 800; final int PING_HANDLER_PRIORITY = priority; PriorityParameters clientHandlerPriorityParameters = new PriorityParameters( PING_HANDLER_PRIORITY); PeriodicParameters clientHandlerPeriodicParameters = new PeriodicParameters( new RelativeTime(200, 0), new RelativeTime( PING_HANDLER_RELEASE_PERIOD_IN_MS, 0)); StorageParameters clientHandlerStorageParameters = new StorageParameters( PING_HANDLER_BACKING_STORE_SIZE_IN_BYTES, null, 0, 0); PingHandler ping = new PingHandler( clientHandlerPriorityParameters, clientHandlerPeriodicParameters, clientHandlerStorageParameters, PING_HANDLER_SCOPE_SIZE_IN_BYTES, manager); ping.register(); } }