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"
88 m_energySource.SetTypeId (
"ns3::BasicEnergySource");
89 m_deviceEnergyModel.SetTypeId (
"ns3::WifiRadioEnergyModel");
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;
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;
272 void DepletionHandler (
void);
281 bool DepletionTestCase (
double simTimeS,
double updateIntervalS);
298 m_updateIntervalS = 1.5;
313 for (
double simTimeS = 0.0; simTimeS <= m_simTimeS; simTimeS += m_timeStepS)
315 for (
double updateIntervalS = 0.5; updateIntervalS <= m_updateIntervalS;
316 updateIntervalS += m_timeStepS)
318 if (DepletionTestCase (simTimeS, updateIntervalS))
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",
411 NS_LOG_DEBUG (
"Update interval = " << updateIntervalS <<
"s");
412 NS_LOG_DEBUG (
"Expected callback count is " << m_numOfNodes);
413 NS_LOG_DEBUG (
"Actual callback count is " << m_callbackCount);
416 if (m_numOfNodes != m_callbackCount)
418 std::cerr <<
"Not all callbacks are invoked!" << std::endl;
428 main (
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 void UpdateEnergySource(void)
Implements UpdateEnergySource.
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.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Run(void)
Run the simulation.
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)
@ DLT_IEEE802_11_RADIO
Include Radiotap link layer information.
Assign WifiRadioEnergyModel to wifi devices.
void SetDepletionCallback(WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
A WiFi radio energy model.
void ChangeState(int newState)
Changes state of the WifiRadioEnergyMode.
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.