package libcsp.csp.app; import javax.realtime.PeriodicParameters; import javax.realtime.PriorityParameters; import javax.realtime.RelativeTime; import javax.safetycritical.Mission; import javax.safetycritical.StorageParameters; import javax.safetycritical.annotate.Level; import javax.safetycritical.annotate.SCJAllowed; import libcsp.csp.CSPManager; import libcsp.csp.ImmortalEntry; import libcsp.csp.handlers.ISRHandler; import libcsp.csp.handlers.RouteHandler; import libcsp.csp.interfaces.IMACProtocol; import libcsp.csp.interfaces.InterfaceLoopback; public abstract class CSPGenericMission extends Mission{ protected CSPManager manager; /* A reference to the router handler */ protected RouteHandler routeHandler; /* Reference to packet interrupt handlers */ protected ISRHandler isrHandlers; /* Expected memory consumption for router handler */ protected StorageParameters routeHandlerStorageParameters; protected PriorityParameters routingPriorityParameters; protected PeriodicParameters routingPeriodicParameters; /** * This must be the first invoked method in the mission initialization * phase. It initializes the router handler with default memory parameters * and creates an entry for this node in the route table through the * LoopBack interface. * * @param nodeAddress * The specified address of the host (must be in the range 0-30) */ @SCJAllowed(Level.LEVEL_1) public void init(int nodeAddress, int intNumber, IMACProtocol interruptProtocolInterface) { manager = new CSPManager(); CSPManager.nodeAddress = (byte) nodeAddress; ImmortalEntry.outgoingPorts = 0; /* Initialize router handler with default memory parameters */ initializeDefaultRouteHandler(); initilaizeInterruptHandler(intNumber, interruptProtocolInterface); manager.routeSet(nodeAddress, InterfaceLoopback.getInterface(), 0x0); } private void initializeDefaultRouteHandler() { final int ROUTING_HANDLER_RELEASE_PERIOD_IN_MS = 20; final int ROUTING_HANDLER_PRIORITY = 20; final int ROUTE_HANDLER_BACKING_STORE_SIZE_IN_BYTES = 2048; final int ROUTE_HANDLER_SCOPE_SIZE_IN_BYTES = 1024; routingPriorityParameters = new PriorityParameters( ROUTING_HANDLER_PRIORITY); routingPeriodicParameters = new PeriodicParameters(new RelativeTime(0, 0), new RelativeTime(ROUTING_HANDLER_RELEASE_PERIOD_IN_MS, 0)); routeHandlerStorageParameters = new StorageParameters( ROUTE_HANDLER_BACKING_STORE_SIZE_IN_BYTES, null, 0, 0); routeHandler = new RouteHandler(routingPriorityParameters, routingPeriodicParameters, routeHandlerStorageParameters, ROUTE_HANDLER_SCOPE_SIZE_IN_BYTES); routeHandler.register(); } /** * * @param intNumber * Total number of interrupt */ private void initilaizeInterruptHandler(int intNumber, IMACProtocol interruptProtocolInterface){ ISRHandler isr = new ISRHandler(new StorageParameters(512, null), 256, interruptProtocolInterface); isr.register(intNumber); } }