Commit 1353b71e authored by Nils Richerzhagen's avatar Nils Richerzhagen
Browse files

Added SiS support for EnergyLevel of Battery.

parent 94bed953
...@@ -34,12 +34,19 @@ import de.tud.kom.p2psim.impl.energy.Battery; ...@@ -34,12 +34,19 @@ import de.tud.kom.p2psim.impl.energy.Battery;
public interface EnergyInfo { public interface EnergyInfo {
/** /**
* Gets the current status of the Battery as a Percentage-Value * Gets the current status of the {@link Battery} as a Percentage-Value
* *
* @return double between 0 and 100 * @return double between 0 and 100
*/ */
public double getCurrentPercentage(); public double getCurrentPercentage();
/**
* Gets the current energy level of the {@link Battery} in uJ.
*
* @return double - the current capacity of the battery in uJ
*/
public double getCurrentEnergyLevel();
/** /**
* Access the Battery - do not use this for functional parts, it is mainly * Access the Battery - do not use this for functional parts, it is mainly
* needed for analyzing * needed for analyzing
......
...@@ -20,10 +20,9 @@ ...@@ -20,10 +20,9 @@
package de.tud.kom.p2psim.impl.energy; package de.tud.kom.p2psim.impl.energy;
/** /**
* This interface implements basic methods used by the EnergyModel * This interface implements basic methods used by the EnergyModel to simulate a
* to simulate a battery. * battery.
* *
* @author Fabio Zöllner * @author Fabio Zöllner
* @version 1.0, 20.04.2012 * @version 1.0, 20.04.2012
...@@ -37,6 +36,13 @@ public interface Battery extends Cloneable { ...@@ -37,6 +36,13 @@ public interface Battery extends Cloneable {
*/ */
public double getCurrentPercentage(); public double getCurrentPercentage();
/**
* Returns the current energy level in uJ.
*
* @return the current capacity of the battery in uJ
*/
public double getCurrentEnergyLevel();
/** /**
* Returns the consumed energy in uJoule * Returns the consumed energy in uJoule
* *
...@@ -48,7 +54,7 @@ public interface Battery extends Cloneable { ...@@ -48,7 +54,7 @@ public interface Battery extends Cloneable {
* Resets the Battery to the initial Energy-Level * Resets the Battery to the initial Energy-Level
*/ */
public void reset(); public void reset();
/** /**
* Sets the battery to a given percentage. * Sets the battery to a given percentage.
* *
......
...@@ -42,7 +42,6 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.battery.BatterySens ...@@ -42,7 +42,6 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.battery.BatterySens
import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSComponent; import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSComponent;
import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSDataCallback; import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSDataCallback;
import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties; import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties;
import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties.SiSScope;
import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationProvider.SiSProviderHandle; import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationProvider.SiSProviderHandle;
import de.tudarmstadt.maki.simonstrator.api.component.sis.exception.InformationNotAvailableException; import de.tudarmstadt.maki.simonstrator.api.component.sis.exception.InformationNotAvailableException;
import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes; import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes;
...@@ -59,7 +58,8 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes; ...@@ -59,7 +58,8 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes;
public class ModularEnergyModel implements EnergyModel, EnergyEventListener, public class ModularEnergyModel implements EnergyModel, EnergyEventListener,
EnergyInfo, BatterySensor { EnergyInfo, BatterySensor {
// private static Logger log = SimLogger.getLogger(ModularEnergyModel.class); // private static Logger log =
// SimLogger.getLogger(ModularEnergyModel.class);
private SimHost host; private SimHost host;
...@@ -78,31 +78,61 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener, ...@@ -78,31 +78,61 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener,
// //
try { try {
SiSComponent sis = host.getComponent(SiSComponent.class); SiSComponent sis = host.getComponent(SiSComponent.class);
sis.provide().nodeState(SiSTypes.ENERGY_BATTERY_LEVEL, new SiSDataCallback<Double>() { sis.provide().nodeState(SiSTypes.ENERGY_BATTERY_LEVEL,
new SiSDataCallback<Double>() {
Set<INodeID> localID = INodeID.getSingleIDSet(getHost().getId());
@Override
public Double getValue(INodeID nodeID,
SiSProviderHandle providerHandle)
throws InformationNotAvailableException {
if (nodeID.equals(getHost().getId())) {
return getCurrentPercentage();
} else {
throw new InformationNotAvailableException();
}
}
@Override Set<INodeID> localID = INodeID.getSingleIDSet(getHost()
public Set<INodeID> getObservedNodes() { .getId());
return localID;
}
@Override @Override
public SiSInfoProperties getInfoProperties() { public Double getValue(INodeID nodeID,
return new SiSInfoProperties(); SiSProviderHandle providerHandle)
} throws InformationNotAvailableException {
}); if (nodeID.equals(getHost().getId())) {
return getCurrentPercentage();
} else {
throw new InformationNotAvailableException();
}
}
@Override
public Set<INodeID> getObservedNodes() {
return localID;
}
@Override
public SiSInfoProperties getInfoProperties() {
return new SiSInfoProperties();
}
});
sis.provide().nodeState(SiSTypes.ENERGY_BATTERY_CAPACITY,
new SiSDataCallback<Double>() {
Set<INodeID> localID = INodeID.getSingleIDSet(getHost()
.getId());
@Override
public Double getValue(INodeID nodeID,
SiSProviderHandle providerHandle)
throws InformationNotAvailableException {
if (nodeID.equals(getHost().getId())) {
return getCurrentEnergyLevel();
} else {
throw new InformationNotAvailableException();
}
}
@Override
public Set<INodeID> getObservedNodes() {
return localID;
}
@Override
public SiSInfoProperties getInfoProperties() {
return new SiSInfoProperties();
}
});
} catch (ComponentNotAvailableException e) { } catch (ComponentNotAvailableException e) {
// OK // OK
} }
...@@ -157,6 +187,11 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener, ...@@ -157,6 +187,11 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener,
return bat.getCurrentPercentage(); return bat.getCurrentPercentage();
} }
@Override
public double getCurrentEnergyLevel() {
return bat.getCurrentEnergyLevel();
}
@Override @Override
public void registerComponent(EnergyComponent comp) { public void registerComponent(EnergyComponent comp) {
comp.setEnergyEventListener(this); comp.setEnergyEventListener(this);
...@@ -182,9 +217,9 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener, ...@@ -182,9 +217,9 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener,
// //
} }
// log.debug(component.toString() + " consumed " + consumedEnergy // log.debug(component.toString() + " consumed " + consumedEnergy
// + " uJ in State " + oldState.getName() + " after spending " // + " uJ in State " + oldState.getName() + " after spending "
// + (timeSpentInOldState/Simulator.SECOND_UNIT) + " sec there."); // + (timeSpentInOldState/Simulator.SECOND_UNIT) + " sec there.");
if (bat.isEmpty()) { if (bat.isEmpty()) {
/* /*
......
...@@ -63,6 +63,14 @@ public class SimpleBattery implements Battery { ...@@ -63,6 +63,14 @@ public class SimpleBattery implements Battery {
return percent; return percent;
} }
@Override
public double getCurrentEnergyLevel() {
if (isEmpty) {
return 0.0;
}
return currentEnergy;
}
@Override @Override
public double getConsumedEnergy() { public double getConsumedEnergy() {
return capacity - currentEnergy; return capacity - currentEnergy;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment