21#include "ns3/basic-energy-source.h"
22#include "ns3/wifi-radio-energy-model.h"
23#include "ns3/basic-energy-source-helper.h"
24#include "ns3/wifi-radio-energy-model-helper.h"
25#include "ns3/energy-source-container.h"
26#include "ns3/device-energy-model-container.h"
29#include "ns3/simulator.h"
30#include "ns3/double.h"
31#include "ns3/config.h"
32#include "ns3/string.h"
33#include "ns3/yans-wifi-helper.h"
95 std::cerr <<
"Problem with state switch test (WifiPhy idle)." << std::endl;
100 std::cerr <<
"Problem with state switch test (WifiPhy cca busy)." << std::endl;
105 std::cerr <<
"Problem with state switch test (WifiPhy tx)." << std::endl;
110 std::cerr <<
"Problem with state switch test (WifiPhy rx)." << std::endl;
115 std::cerr <<
"Problem with state switch test (WifiPhy switching)." << std::endl;
120 std::cerr <<
"Problem with state switch test (WifiPhy sleep)." << std::endl;
142 model->SetEnergySource (source);
150 if ((models.
GetN () == 0))
152 std::cerr <<
"Model list is empty!." << std::endl;
157 DynamicCast<WifiRadioEnergyModel> (models.
Get (0));
161 std::cerr <<
"NULL pointer to device model!." << std::endl;
172 &WifiRadioEnergyModel::ChangeState, devModel, state);
176 &BasicEnergySource::UpdateEnergySource, source);
178 double timeDelta = 0.000000001;
188 estRemainingEnergy -= devModel->GetIdleCurrentA () * voltage *
m_timeS;
191 double current = 0.0;
195 current = devModel->GetIdleCurrentA ();
198 current = devModel->GetCcaBusyCurrentA ();
201 current = devModel->GetTxCurrentA ();
204 current = devModel->GetRxCurrentA ();
207 current = devModel->GetSwitchingCurrentA ();
210 current = devModel->GetSleepCurrentA ();
219 estRemainingEnergy -= current * voltage *
m_timeS;
220 estRemainingEnergy =
std::max (0.0, estRemainingEnergy);
224 NS_LOG_DEBUG (
"Remaining energy is " << remainingEnergy);
225 NS_LOG_DEBUG (
"Estimated remaining energy is " << estRemainingEnergy);
226 NS_LOG_DEBUG (
"Difference is " << estRemainingEnergy - remainingEnergy);
229 if ((remainingEnergy > (estRemainingEnergy +
m_tolerance))
230 || (remainingEnergy < (estRemainingEnergy -
m_tolerance)))
232 std::cerr <<
"Incorrect remaining energy!" << std::endl;
240 if (endState != state)
242 std::cerr <<
"Incorrect end state!" << std::endl;
245 Simulator::Destroy ();
321 std::cerr <<
"Depletion test case problem." << std::endl;
338 double updateIntervalS)
344 std::string phyMode (
"DsssRate1Mbps");
375 wifi.SetRemoteStationManager (
"ns3::ConstantRateWifiManager",
379 wifiMac.
SetType (
"ns3::AdhocWifiMac");
389 basicSourceHelper.
Set (
"BasicEnergySourceInitialEnergyJ",
DoubleValue (0.0));
391 basicSourceHelper.
Set (
"PeriodicEnergyUpdateInterval",
406 Simulator::Stop (
Seconds (simTimeS));
408 Simulator::Destroy ();
411 NS_LOG_DEBUG (
"Update interval = " << updateIntervalS <<
"s");
418 std::cerr <<
"Not all callbacks are invoked!" << std::endl;
428main (
int argc,
char **argv)
431 if (testEnergyUpdate.
DoRun ())
437 if (testEnergyDepletion.
DoRun ())
Test case of energy depletion handling for BasicEnergySource and WifiRadioEnergyModel.
BasicEnergyDepletionTest()
double m_updateIntervalS
update interval of each device model
double m_simTimeS
maximum simulation time, in seconds
double m_timeStepS
simulation time step size, in seconds
int m_numOfNodes
number of nodes in simulation
virtual ~BasicEnergyDepletionTest()
bool DepletionTestCase(double simTimeS, double updateIntervalS)
bool DoRun(void)
Performs some tests involving energy depletion.
void DepletionHandler(void)
Callback invoked when energy is drained from source.
int m_callbackCount
counter for # of callbacks invoked
Test case of update remaining energy for BasicEnergySource and WifiRadioEnergyModel.
double m_timeS
Time in seconds.
ObjectFactory m_energySource
Energy source factory.
ObjectFactory m_deviceEnergyModel
Device energy model factory.
bool StateSwitchTest(WifiPhyState state)
virtual ~BasicEnergyUpdateTest()
double m_tolerance
Tolerance for power estimation.
bool DoRun(void)
Performs some tests involving state updates and the relative energy consumption.
Creates a BasicEnergySource object.
void Set(std::string name, const AttributeValue &v)
BasicEnergySource decreases/increases remaining energy stored in itself in linearly.
virtual double GetRemainingEnergy(void)
virtual double GetInitialEnergy(void) const
virtual double GetSupplyVoltage(void) const
void SetInitialEnergy(double initialEnergyJ)
Holds a vector of ns3::DeviceEnergyModel pointers.
uint32_t GetN(void) const
Get the number of Ptr<DeviceEnergyModel> stored in this container.
Ptr< DeviceEnergyModel > Get(uint32_t i) const
Get the i-th Ptr<DeviceEnergyModel> stored in this container.
DeviceEnergyModelContainer Install(Ptr< NetDevice > device, Ptr< EnergySource > source) const
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Holds a vector of ns3::EnergySource pointers.
EnergySourceContainer Install(Ptr< Node > node) const
void AppendDeviceEnergyModel(Ptr< DeviceEnergyModel > deviceEnergyModelPtr)
DeviceEnergyModelContainer FindDeviceEnergyModels(TypeId tid)
void SetNode(Ptr< Node > node)
Sets pointer to node containing this EnergySource.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
Hold variables of type string.
AttributeValue implementation for Time.
helps to create WifiNetDevice objects
create MAC layers for a ns3::WifiNetDevice.
void SetType(std::string type, Args &&... args)
void SetPcapDataLinkType(SupportedPcapDataLinkTypes dlt)
Set the data link type of PCAP traces to be used.
void Set(std::string name, const AttributeValue &v)
Assign WifiRadioEnergyModel to wifi devices.
void SetDepletionCallback(WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
A WiFi radio energy model.
manage and create wifi channel objects for the YANS model.
void SetPropagationDelay(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Ptr< YansWifiChannel > Create(void) const
Make it easy to create and manage PHY objects for the YANS model.
void SetChannel(Ptr< YansWifiChannel > channel)
void SetDefault(std::string name, const AttributeValue &value)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#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.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
WifiPhyState
The state of the PHY layer.
@ CCA_BUSY
The PHY layer has sense the medium busy through the CCA mechanism.
@ SWITCHING
The PHY layer is switching to other channel.
@ RX
The PHY layer is receiving a packet.
@ TX
The PHY layer is sending a packet.
@ OFF
The PHY layer is switched off.
@ SLEEP
The PHY layer is sleeping.
@ IDLE
The PHY layer is IDLE.