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" 
   77   m_tolerance = 1.0e-13;  
 
   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;
 
  136   source->SetNode (node);
 
  144   source->AppendDeviceEnergyModel (model);
 
  148     source->FindDeviceEnergyModels (
"ns3::WifiRadioEnergyModel");
 
  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; 
 
  186   double estRemainingEnergy = source->GetInitialEnergy ();
 
  187   double voltage = source->GetSupplyVoltage ();
 
  188   estRemainingEnergy -= devModel->
GetIdleCurrentA () * voltage * m_timeS;
 
  191   double current = 0.0;
 
  219   estRemainingEnergy -= current * voltage * m_timeS;
 
  220   estRemainingEnergy = 
std::max (0.0, estRemainingEnergy);
 
  223   double remainingEnergy = source->GetRemainingEnergy ();
 
  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");
 
  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 ())
 
void Set(std::string name, const AttributeValue &v)
 
DeviceEnergyModelContainer Install(Ptr< NetDevice > device, Ptr< EnergySource > source) const 
 
Assign WifiRadioEnergyModel to wifi devices. 
 
Holds a vector of ns3::EnergySource pointers. 
 
ObjectFactory m_deviceEnergyModel
 
void SetDepletionCallback(WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
 
Ptr< YansWifiChannel > Create(void) const 
 
void SetRemoteStationManager(std::string type, 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())
 
Hold variables of type string. 
 
Make it easy to create and manage PHY objects for the yans model. 
 
bool StateSwitchTest(WifiPhyState state)
 
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together. 
 
The PHY layer is sleeping. 
 
static void Run(void)
Run the simulation. 
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
BasicEnergySource decreases/increases remaining energy stored in itself in linearly. 
 
void ChangeState(int newState)
Changes state of the WifiRadioEnergyMode. 
 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
 
virtual void UpdateEnergySource(void)
Implements UpdateEnergySource. 
 
Test case of update remaining energy for BasicEnergySource and WifiRadioEnergyModel. 
 
double GetSleepCurrentA(void) const 
Gets sleep current. 
 
static YansWifiPhyHelper Default(void)
Create a phy helper in a default working state. 
 
helps to create WifiNetDevice objects 
 
Holds a vector of ns3::DeviceEnergyModel pointers. 
 
BasicEnergyDepletionTest()
 
virtual void SetStandard(WifiPhyStandard standard)
 
void SetChannel(Ptr< YansWifiChannel > channel)
 
double GetCcaBusyCurrentA(void) const 
Gets CCA busy current. 
 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
 
AttributeValue implementation for Time. 
 
Creates a BasicEnergySource object. 
 
holds a vector of ns3::NetDevice pointers 
 
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const 
 
The PHY layer has sense the medium busy through the CCA mechanism. 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy(). 
 
Ptr< DeviceEnergyModel > Get(uint32_t i) const 
Get the i-th Ptr stored in this container. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
keep track of a set of node pointers. 
 
bool DoRun(void)
Performs some tests involving state updates and the relative energy consumption. 
 
WifiPhyState
The state of the PHY layer. 
 
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18) 
 
EnergySourceContainer Install(Ptr< Node > node) const 
 
double GetTxCurrentA(void) const 
Gets transmit current. 
 
bool DoRun(void)
Performs some tests involving energy depletion. 
 
Test case of energy depletion handling for BasicEnergySource and WifiRadioEnergyModel. 
 
double GetRxCurrentA(void) const 
Gets receive current. 
 
manage and create wifi channel objects for the yans model. 
 
create MAC layers for a ns3::WifiNetDevice. 
 
void SetPcapDataLinkType(SupportedPcapDataLinkTypes dlt)
Set the data link type of PCAP traces to be used. 
 
A WiFi radio energy model. 
 
virtual ~BasicEnergyUpdateTest()
 
virtual void SetType(std::string type, 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(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue(), std::string n10="", const AttributeValue &v10=EmptyAttributeValue())
 
WifiPhyState GetCurrentState(void) const 
 
Instantiate subclasses of ns3::Object. 
 
The PHY layer is sending a packet. 
 
static void Stop(void)
Tell the Simulator the calling event should be the last one executed. 
 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
 
virtual ~BasicEnergyDepletionTest()
 
Time Seconds(double value)
Construct a Time in the indicated unit. 
 
The PHY layer is receiving a packet. 
 
void SetDefault(std::string name, const AttributeValue &value)
 
void Set(std::string name, const AttributeValue &v)
 
double GetIdleCurrentA(void) const 
Gets idle current. 
 
The PHY layer is switched off. 
 
The PHY layer is switching to other channel. 
 
uint32_t GetN(void) const 
Get the number of Ptr stored in this container. 
 
void SetInitialEnergy(double initialEnergyJ)
 
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer. 
 
ObjectFactory m_energySource
 
void SetEnergySource(const Ptr< EnergySource > source)
Sets pointer to EnergySouce installed on node. 
 
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())
 
This class can be used to hold variables of floating point type such as 'double' or 'float'...
 
Include Radiotap link layer information. 
 
bool DepletionTestCase(double simTimeS, double updateIntervalS)
 
void DepletionHandler(void)
Callback invoked when energy is drained from source. 
 
double GetSwitchingCurrentA(void) const 
Gets switching current.