////////////////////////////////////////////////// // JIST (Java In Simulation Time) Project // Timestamp: // // Copyright (C) 2004 by Cornell University // All rights reserved. // Refer to LICENSE for terms and conditions of use. package driver; import java.io.IOException; import jist.swans.Constants; import jist.swans.misc.Util; import jist.swans.misc.Mapper; import jist.swans.misc.Location; import jist.swans.field.Field; import jist.swans.field.Placement; import jist.swans.field.Mobility; import jist.swans.field.Spatial; import jist.swans.field.Fading; import jist.swans.field.PathLoss; import jist.swans.radio.RadioNoiseIndep; import jist.swans.radio.RadioInfo; import jist.swans.mac.MacAddress; import jist.swans.mac.MacDumb; import jist.swans.net.NetAddress; import jist.swans.net.NetIp; import jist.swans.net.PacketLoss; import jist.swans.app.AppHeartbeat; import jist.runtime.JistAPI; /** * SWANS demo/test: heartbeat application. * * @author Rimon Barr <barr+jist@cs.cornell.edu> * @version $Id: heartbeat.java,v 1.16 2004/11/22 16:51:05 barr Exp $ */ public class heartbeat { /** random waypoint pause time. */ public static final int PAUSE_TIME = 30; /** random waypoint granularity. */ public static final int GRANULARITY = 10; /** random waypoint minimum speed. */ public static final int MIN_SPEED = 2; /** random waypoint maximum speed. */ public static final int MAX_SPEED = 10; /** * Initialize simulation node. * * @param i node number * @param field simulation field * @param placement node placement model * @param radioInfoShared shared radio information * @param protMap shared protocol map * @param plIn incoming packet loss model * @param plOut outgoing packet loss model */ public static void createNode(int i, Field field, Placement placement, RadioInfo.RadioInfoShared radioInfoShared, Mapper protMap, PacketLoss plIn, PacketLoss plOut) { // create entities RadioNoiseIndep radio = new RadioNoiseIndep(i, radioInfoShared); MacDumb mac = new MacDumb(new MacAddress(i), radio.getRadioInfo()); //Mac802_11 mac = new Mac802_11(new MacAddress(i), radio.getRadioInfo()); NetIp net = new NetIp(new NetAddress(i), protMap, plIn, plOut); AppHeartbeat app = new AppHeartbeat(i, true); // hookup entities field.addRadio(radio.getRadioInfo(), radio.getProxy(), placement.getNextLocation()); field.startMobility(radio.getRadioInfo().getUnique().getID()); radio.setFieldEntity(field.getProxy()); radio.setMacEntity(mac.getProxy()); mac.setRadioEntity(radio.getProxy()); byte intId = net.addInterface(mac.getProxy()); mac.setNetEntity(net.getProxy(), intId); net.setProtocolHandler(Constants.NET_PROTOCOL_HEARTBEAT, app.getNetProxy()); app.setNetEntity(net.getProxy()); app.getAppProxy().run(null); } /** * Initialize simulation field. * * @param nodes number of nodes * @param length length of field * @return simulation field */ public static Field createSim(int nodes, int length) { Location.Location2D bounds = new Location.Location2D(length, length); Placement placement = new Placement.Random(bounds); Mobility mobility = new Mobility.RandomWaypoint(bounds, PAUSE_TIME, GRANULARITY, MAX_SPEED, MIN_SPEED); Spatial spatial = new Spatial.HierGrid(bounds, 5); Fading fading = new Fading.None(); PathLoss pathloss = new PathLoss.FreeSpace(); Field field = new Field(spatial, fading, pathloss, mobility, Constants.PROPAGATION_LIMIT_DEFAULT); RadioInfo.RadioInfoShared radioInfoShared = RadioInfo.createShared( Constants.FREQUENCY_DEFAULT, Constants.BANDWIDTH_DEFAULT, Constants.TRANSMIT_DEFAULT, Constants.GAIN_DEFAULT, Util.fromDB(Constants.SENSITIVITY_DEFAULT), Util.fromDB(Constants.THRESHOLD_DEFAULT), Constants.TEMPERATURE_DEFAULT, Constants.TEMPERATURE_FACTOR_DEFAULT, Constants.AMBIENT_NOISE_DEFAULT); Mapper protMap = new Mapper(Constants.NET_PROTOCOL_MAX); protMap.mapToNext(Constants.NET_PROTOCOL_HEARTBEAT); PacketLoss pl = new PacketLoss.Zero(); for(int i=0; i