package libcsp.csp.app.clientserver; 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; import libcsp.csp.app.clientserver.ClientHandler; import libcsp.csp.app.clientserver.ServerHandler; public class ClientServerMission 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() { /* Initialize router task, interrupt tasks, and Loopback route */ init((byte) ImmortalEntry.NODE_ADDRESS, 2, null); /* Initialize application specific handlers */ initializeClientHandler(5, 'A'); initializeClientHandler(6, 'B'); initializeServerHandler(); } @Override @SCJAllowed public long missionMemorySize() { // TODO Auto-generated method stub return 0; } private void initializeClientHandler(int priority, char data) { final int CLIENT_HANDLER_BACKING_STORE_SIZE_IN_BYTES = 1024; final int CLIENT_HANDLER_SCOPE_SIZE_IN_BYTES = 800; final int CLIENT_HANDLER_RELEASE_PERIOD_IN_MS = 800; final int CLIENT_HANDLER_PRIORITY = priority; PriorityParameters clientHandlerPriorityParameters = new PriorityParameters( CLIENT_HANDLER_PRIORITY); PeriodicParameters clientHandlerPeriodicParameters = new PeriodicParameters( new RelativeTime(200, 0), new RelativeTime( CLIENT_HANDLER_RELEASE_PERIOD_IN_MS, 0)); StorageParameters clientHandlerStorageParameters = new StorageParameters( CLIENT_HANDLER_BACKING_STORE_SIZE_IN_BYTES, null, 0, 0); ClientHandler client = new ClientHandler( clientHandlerPriorityParameters, clientHandlerPeriodicParameters, clientHandlerStorageParameters, CLIENT_HANDLER_SCOPE_SIZE_IN_BYTES, manager, data); client.register(); } private void initializeServerHandler() { final int SERVER_HANDLER_BACKING_STORE_SIZE_IN_BYTES = 1024; final int SERVER_HANDLER_SCOPE_SIZE_IN_BYTES = 800; final int SERVER_HANDLER_RELEASE_PERIOD_IN_MS = 400; final int SERVER_HANDLER_PRIORITY = 15; PriorityParameters serverHandlerPriorityParameters = new PriorityParameters( SERVER_HANDLER_PRIORITY); PeriodicParameters serverHandlerPeriodicParameters = new PeriodicParameters( new RelativeTime(0, 0), new RelativeTime( SERVER_HANDLER_RELEASE_PERIOD_IN_MS, 0)); StorageParameters serverHandlerStorageParameters = new StorageParameters( SERVER_HANDLER_BACKING_STORE_SIZE_IN_BYTES, null, 0, 0); ServerHandler server = new ServerHandler( serverHandlerPriorityParameters, serverHandlerPeriodicParameters, serverHandlerStorageParameters, SERVER_HANDLER_SCOPE_SIZE_IN_BYTES, manager); server.register(); } }