--- a/src/energy/model/basic-energy-source.cc Fri Sep 05 15:38:55 2014 -0700
+++ b/src/energy/model/basic-energy-source.cc Fri Sep 05 16:33:57 2014 -0700
@@ -49,6 +49,16 @@
MakeDoubleAccessor (&BasicEnergySource::SetSupplyVoltage,
&BasicEnergySource::GetSupplyVoltage),
MakeDoubleChecker<double> ())
+ .AddAttribute ("BasicEnergyLowBatteryThreshold",
+ "Low battery threshold for basic energy source.",
+ DoubleValue (0.10), // as a fraction of the initial energy
+ MakeDoubleAccessor (&BasicEnergySource::m_lowBatteryTh),
+ MakeDoubleChecker<double> ())
+ .AddAttribute ("BasicEnergyHighBatteryThreshold",
+ "High battery threshold for basic energy source.",
+ DoubleValue (0.15), // as a fraction of the initial energy
+ MakeDoubleAccessor (&BasicEnergySource::m_highBatteryTh),
+ MakeDoubleChecker<double> ())
.AddAttribute ("PeriodicEnergyUpdateInterval",
"Time between two consecutive periodic energy updates.",
TimeValue (Seconds (1.0)),
@@ -66,6 +76,7 @@
{
NS_LOG_FUNCTION (this);
m_lastUpdateTime = Seconds (0.0);
+ m_depleted = false;
}
BasicEnergySource::~BasicEnergySource ()
@@ -151,13 +162,19 @@
CalculateRemainingEnergy ();
- if (m_remainingEnergyJ <= 0)
+ m_lastUpdateTime = Simulator::Now ();
+
+ if (!m_depleted && m_remainingEnergyJ <= m_lowBatteryTh * m_initialEnergyJ)
{
+ m_depleted = true;
HandleEnergyDrainedEvent ();
- return; // stop periodic update
}
- m_lastUpdateTime = Simulator::Now ();
+ if (m_depleted && m_remainingEnergyJ > m_highBatteryTh * m_initialEnergyJ)
+ {
+ m_depleted = false;
+ HandleEnergyRechargedEvent ();
+ }
m_energyUpdateEvent = Simulator::Schedule (m_energyUpdateInterval,
&BasicEnergySource::UpdateEnergySource,
@@ -188,7 +205,18 @@
NS_LOG_FUNCTION (this);
NS_LOG_DEBUG ("BasicEnergySource:Energy depleted!");
NotifyEnergyDrained (); // notify DeviceEnergyModel objects
- m_remainingEnergyJ = 0; // energy never goes below 0
+ if (m_remainingEnergyJ <= 0)
+ {
+ m_remainingEnergyJ = 0; // energy never goes below 0
+ }
+}
+
+void
+BasicEnergySource::HandleEnergyRechargedEvent (void)
+{
+ NS_LOG_FUNCTION (this);
+ NS_LOG_DEBUG ("BasicEnergySource:Energy recharged!");
+ NotifyEnergyRecharged (); // notify DeviceEnergyModel objects
}
void