22 #include "ns3/assert.h"
23 #include "ns3/double.h"
25 #include "ns3/simulator.h"
26 #include "ns3/trace-source-accessor.h"
39 TypeId(
"ns3::BasicEnergySource")
41 .SetGroupName(
"Energy")
43 .AddAttribute(
"BasicEnergySourceInitialEnergyJ",
44 "Initial energy stored in basic energy source.",
48 MakeDoubleChecker<double>())
49 .AddAttribute(
"BasicEnergySupplyVoltageV",
50 "Initial supply voltage for basic energy source.",
54 MakeDoubleChecker<double>())
55 .AddAttribute(
"BasicEnergyLowBatteryThreshold",
56 "Low battery threshold for basic energy source.",
59 MakeDoubleChecker<double>())
60 .AddAttribute(
"BasicEnergyHighBatteryThreshold",
61 "High battery threshold for basic energy source.",
64 MakeDoubleChecker<double>())
65 .AddAttribute(
"PeriodicEnergyUpdateInterval",
66 "Time between two consecutive periodic energy updates.",
71 .AddTraceSource(
"RemainingEnergy",
72 "Remaining energy at BasicEnergySource.",
74 "ns3::TracedValueCallback::Double");
156 NS_LOG_DEBUG(
"BasicEnergySource:Updating remaining energy.");
228 double energyToDecreaseJ = (totalCurrentA *
m_supplyVoltageV * duration).GetSeconds();
BasicEnergySource decreases/increases remaining energy stored in itself in linearly.
void HandleEnergyRechargedEvent()
Handles the remaining energy exceeding the high threshold after it went below the low threshold.
void SetEnergyUpdateInterval(Time interval)
double GetSupplyVoltage() const override
static TypeId GetTypeId()
Get the type ID.
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
double GetRemainingEnergy() override
double GetEnergyFraction() override
void HandleEnergyDrainedEvent()
Handles the remaining energy going to zero event.
Time m_lastUpdateTime
last update time
double GetInitialEnergy() const override
void SetSupplyVoltage(double supplyVoltageV)
void DoDispose() override
Defined in ns3::Object.
EventId m_energyUpdateEvent
energy update event
void DoInitialize() override
Defined in ns3::Object.
~BasicEnergySource() override
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 UpdateEnergySource() override
Implements UpdateEnergySource.
Time GetEnergyUpdateInterval() const
void SetInitialEnergy(double initialEnergyJ)
double m_supplyVoltageV
supply voltage, in Volts
void CalculateRemainingEnergy()
Calculates remaining energy.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
double CalculateTotalCurrent()
void NotifyEnergyRecharged()
This function notifies all DeviceEnergyModel of energy recharged event.
void NotifyEnergyChanged()
This function notifies all DeviceEnergyModel of energy changed event.
void BreakDeviceEnergyModelRefCycle()
This function is called to break reference cycle between EnergySource and DeviceEnergyModel.
void NotifyEnergyDrained()
This function notifies all DeviceEnergyModel of energy depletion event.
bool IsExpired() const
This method is syntactic sugar for the ns3::Simulator::IsExpired method.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static Time Now()
Return the current simulation virtual time.
Simulation virtual time values and global simulation resolution.
bool IsPositive() const
Exactly equivalent to t >= 0.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#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.
Time Seconds(double value)
Construct a Time in the indicated unit.
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 AttributeAccessor > MakeTimeAccessor(T1 a1)
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)