A Discrete-Event Network Simulator
API
basic-energy-source.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
19 */
20
21#include "basic-energy-source.h"
22#include "ns3/log.h"
23#include "ns3/assert.h"
24#include "ns3/double.h"
25#include "ns3/trace-source-accessor.h"
26#include "ns3/simulator.h"
27
28namespace ns3 {
29
30NS_LOG_COMPONENT_DEFINE ("BasicEnergySource");
31
32NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource);
33
34TypeId
36{
37 static TypeId tid = TypeId ("ns3::BasicEnergySource")
39 .SetGroupName ("Energy")
40 .AddConstructor<BasicEnergySource> ()
41 .AddAttribute ("BasicEnergySourceInitialEnergyJ",
42 "Initial energy stored in basic energy source.",
43 DoubleValue (10), // in Joules
46 MakeDoubleChecker<double> ())
47 .AddAttribute ("BasicEnergySupplyVoltageV",
48 "Initial supply voltage for basic energy source.",
49 DoubleValue (3.0), // in Volts
52 MakeDoubleChecker<double> ())
53 .AddAttribute ("BasicEnergyLowBatteryThreshold",
54 "Low battery threshold for basic energy source.",
55 DoubleValue (0.10), // as a fraction of the initial energy
57 MakeDoubleChecker<double> ())
58 .AddAttribute ("BasicEnergyHighBatteryThreshold",
59 "High battery threshold for basic energy source.",
60 DoubleValue (0.15), // as a fraction of the initial energy
62 MakeDoubleChecker<double> ())
63 .AddAttribute ("PeriodicEnergyUpdateInterval",
64 "Time between two consecutive periodic energy updates.",
65 TimeValue (Seconds (1.0)),
69 .AddTraceSource ("RemainingEnergy",
70 "Remaining energy at BasicEnergySource.",
72 "ns3::TracedValueCallback::Double")
73 ;
74 return tid;
75}
76
78{
79 NS_LOG_FUNCTION (this);
81 m_depleted = false;
82}
83
85{
86 NS_LOG_FUNCTION (this);
87}
88
89void
91{
92 NS_LOG_FUNCTION (this << initialEnergyJ);
93 NS_ASSERT (initialEnergyJ >= 0);
94 m_initialEnergyJ = initialEnergyJ;
96}
97
98void
100{
101 NS_LOG_FUNCTION (this << supplyVoltageV);
102 m_supplyVoltageV = supplyVoltageV;
103}
104
105void
107{
108 NS_LOG_FUNCTION (this << interval);
109 m_energyUpdateInterval = interval;
110}
111
112Time
114{
115 NS_LOG_FUNCTION (this);
117}
118
119double
121{
122 NS_LOG_FUNCTION (this);
123 return m_supplyVoltageV;
124}
125
126double
128{
129 NS_LOG_FUNCTION (this);
130 return m_initialEnergyJ;
131}
132
133double
135{
136 NS_LOG_FUNCTION (this);
137 // update energy source to get the latest remaining energy.
139 return m_remainingEnergyJ;
140}
141
142double
144{
145 NS_LOG_FUNCTION (this);
146 // update energy source to get the latest remaining energy.
149}
150
151void
153{
154 NS_LOG_FUNCTION (this);
155 NS_LOG_DEBUG ("BasicEnergySource:Updating remaining energy.");
156
157 double remainingEnergy = m_remainingEnergyJ;
159
161
163 {
164 m_depleted = true;
166 }
168 {
169 m_depleted = false;
171 }
172 else if (m_remainingEnergyJ != remainingEnergy)
173 {
175 }
176
178 {
181 this);
182 }
183}
184
185/*
186 * Private functions start here.
187 */
188
189void
191{
192 NS_LOG_FUNCTION (this);
193 UpdateEnergySource (); // start periodic update
194}
195
196void
198{
199 NS_LOG_FUNCTION (this);
200 BreakDeviceEnergyModelRefCycle (); // break reference cycle
201}
202
203void
205{
206 NS_LOG_FUNCTION (this);
207 NS_LOG_DEBUG ("BasicEnergySource:Energy depleted!");
208 NotifyEnergyDrained (); // notify DeviceEnergyModel objects
209}
210
211void
213{
214 NS_LOG_FUNCTION (this);
215 NS_LOG_DEBUG ("BasicEnergySource:Energy recharged!");
216 NotifyEnergyRecharged (); // notify DeviceEnergyModel objects
217}
218
219void
221{
222 NS_LOG_FUNCTION (this);
223 double totalCurrentA = CalculateTotalCurrent ();
224 Time duration = Simulator::Now () - m_lastUpdateTime;
225 NS_ASSERT (duration.IsPositive ());
226 // energy = current * voltage * time
227 double energyToDecreaseJ = (totalCurrentA * m_supplyVoltageV * duration).GetSeconds ();
228 NS_ASSERT (m_remainingEnergyJ >= energyToDecreaseJ);
229 m_remainingEnergyJ -= energyToDecreaseJ;
230 NS_LOG_DEBUG ("BasicEnergySource:Remaining energy = " << m_remainingEnergyJ);
231}
232
233} // namespace ns3
BasicEnergySource decreases/increases remaining energy stored in itself in linearly.
void SetEnergyUpdateInterval(Time interval)
virtual void UpdateEnergySource(void)
Implements UpdateEnergySource.
virtual double GetRemainingEnergy(void)
void HandleEnergyDrainedEvent(void)
Handles the remaining energy going to zero event.
Time m_energyUpdateInterval
energy update interval
double m_initialEnergyJ
initial energy, in Joules
double m_lowBatteryTh
low battery threshold, as a fraction of the initial energy
Time m_lastUpdateTime
last update time
void SetSupplyVoltage(double supplyVoltageV)
EventId m_energyUpdateEvent
energy update event
void HandleEnergyRechargedEvent(void)
Handles the remaining energy exceeding the high threshold after it went below the low threshold.
static TypeId GetTypeId(void)
Get the type ID.
virtual double GetEnergyFraction(void)
virtual double GetInitialEnergy(void) const
Time GetEnergyUpdateInterval(void) const
TracedValue< double > m_remainingEnergyJ
remaining energy, in Joules
bool m_depleted
set to true when the remaining energy goes below the low threshold, set to false again when the remai...
double m_highBatteryTh
high battery threshold, as a fraction of the initial energy
void CalculateRemainingEnergy(void)
Calculates remaining energy.
virtual double GetSupplyVoltage(void) const
void DoDispose(void)
Defined in ns3::Object.
void SetInitialEnergy(double initialEnergyJ)
double m_supplyVoltageV
supply voltage, in Volts
void DoInitialize(void)
Defined in ns3::Object.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
Introspection did not find any typical Config paths.
Definition: energy-source.h:87
void NotifyEnergyRecharged(void)
This function notifies all DeviceEnergyModel of energy recharged event.
void NotifyEnergyChanged(void)
This function notifies all DeviceEnergyModel of energy changed event.
void BreakDeviceEnergyModelRefCycle(void)
This function is called to break reference cycle between EnergySource and DeviceEnergyModel.
double CalculateTotalCurrent(void)
void NotifyEnergyDrained(void)
This function notifies all DeviceEnergyModel of energy depletion event.
bool IsExpired(void) const
This method is syntactic sugar for the ns3::Simulator::IsExpired method.
Definition: event-id.cc:65
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:556
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:195
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
bool IsPositive(void) const
Exactly equivalent to t >= 0.
Definition: nstime.h:316
AttributeValue implementation for Time.
Definition: nstime.h:1308
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Definition: double.h:42
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Definition: nstime.h:1309
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Definition: time.cc:536