/*******************************************************************************
* Copyright (c) 2010
* Andreas Engelbredt Dalsgaard
* Casper Jensen
* Christian Frost
* Kasper Søe Luckow.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Andreas Engelbredt Dalsgaard <andreas.dalsgaard@gmail.com> - Changes to run on jop SCJ implementation
* Casper Jensen <semadk@gmail.com> - Initial implementation
* Christian Frost <thecfrost@gmail.com> - Initial implementation
* Kasper Søe Luckow <luckow@cs.aau.dk> - Initial implementation
******************************************************************************/
package minepump.scj;
import javax.realtime.RelativeTime;
import javax.realtime.PriorityParameters;
import javax.realtime.RelativeTime;
import javax.realtime.PeriodicParameters;
import javax.safetycritical.Mission;
import javax.safetycritical.StorageParameters;
import minepump.actuators.GenericActuator;
import minepump.actuators.WaterpumpActuator;
import minepump.scj.PeriodicMethaneDetectionEventHandler;
import minepump.scj.PeriodicWaterLevelDetectionEventHandler;
import minepump.sensors.HighWaterSensor;
import minepump.sensors.LowWaterSensor;
import minepump.sensors.MethaneSensor;
public class MainMission extends Mission {
private static final int PERIODIC_GAS_PERIOD = 56;
private static final int PERIODIC_WATER_PERIOD = 40;
private static final int SPORADIC_WATER_PERIOD = 40;
private static final int GAS_PRIORITY = 10;
private static final int WATER_PRIORITY = 10;
private static final int ACTUATOR_ID_WATERPUMP = 0;
private static final int ACTUATOR_ID_ENVIRONMENT = 1;
private static final int SENSOR_ID_METHANE = 0;
private static final int SENSOR_ID_HIGH_WATER = 1;
private static final int SENSOR_ID_LOW_WATER = 2;
// TODO set mission memory size
public long missionMemorySize() { return 10000; }
public static void MyInitialize()
{
new MainMission().initialize();
}
protected void initialize() {
// Actuators
WaterpumpActuator waterpumpActuator = new WaterpumpActuator(ACTUATOR_ID_WATERPUMP);
GenericActuator environmentActuators = new GenericActuator(ACTUATOR_ID_ENVIRONMENT);
// Sensors
int criticalMethaneLevel = 2;
int brickHistorySize = 10;
MethaneSensor methaneSensor = new MethaneSensor(SENSOR_ID_METHANE, criticalMethaneLevel, brickHistorySize);
int consecutiveNoWaterReadings = 3;
int consecutiveHighWaterReadings = 3;
HighWaterSensor highWaterSensor = new HighWaterSensor(SENSOR_ID_HIGH_WATER, consecutiveHighWaterReadings);
LowWaterSensor lowWaterSensor = new LowWaterSensor(SENSOR_ID_LOW_WATER, consecutiveNoWaterReadings);
// Methane
PeriodicMethaneDetectionEventHandler methane = new PeriodicMethaneDetectionEventHandler(
new PriorityParameters(11),
new PeriodicParameters(new RelativeTime(0,0), new RelativeTime(PERIODIC_GAS_PERIOD,0)),
new StorageParameters(100000L, null), // TODO update memory size
10000, // Set the size of the private scoped memory area for this event handler
methaneSensor, waterpumpActuator);
methane.register();
// Water
PeriodicWaterLevelDetectionEventHandler water = new PeriodicWaterLevelDetectionEventHandler(
new PriorityParameters(11),
new PeriodicParameters(new RelativeTime(0,0), new RelativeTime(PERIODIC_WATER_PERIOD,0)),
new StorageParameters(100000L, null), // TODO update memory size
10000, // Set the size of the private scoped memory area for this event handler
highWaterSensor,
lowWaterSensor,
waterpumpActuator);
water.register();
// init system
environmentActuators.start();
}
}