src/energy/helper/wifi-radio-energy-model-helper.cc
changeset 10883 d919e7194e23
parent 7385 10beb0e53130
equal deleted inserted replaced
10882:75e256e51d9d 10883:d919e7194e23
    22 #include "basic-energy-source-helper.h"
    22 #include "basic-energy-source-helper.h"
    23 #include "ns3/wifi-phy.h"
    23 #include "ns3/wifi-phy.h"
    24 #include "ns3/wifi-net-device.h"
    24 #include "ns3/wifi-net-device.h"
    25 #include "ns3/config.h"
    25 #include "ns3/config.h"
    26 #include "ns3/names.h"
    26 #include "ns3/names.h"
       
    27 #include "ns3/wifi-tx-current-model.h"
    27 
    28 
    28 namespace ns3 {
    29 namespace ns3 {
    29 
    30 
    30 WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper ()
    31 WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper ()
    31 {
    32 {
    32   m_radioEnergy.SetTypeId ("ns3::WifiRadioEnergyModel");
    33   m_radioEnergy.SetTypeId ("ns3::WifiRadioEnergyModel");
    33   m_depletionCallback.Nullify ();
    34   m_depletionCallback.Nullify ();
       
    35   m_rechargedCallback.Nullify ();
    34 }
    36 }
    35 
    37 
    36 WifiRadioEnergyModelHelper::~WifiRadioEnergyModelHelper ()
    38 WifiRadioEnergyModelHelper::~WifiRadioEnergyModelHelper ()
    37 {
    39 {
    38 }
    40 }
    47 WifiRadioEnergyModelHelper::SetDepletionCallback (
    49 WifiRadioEnergyModelHelper::SetDepletionCallback (
    48   WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
    50   WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
    49 {
    51 {
    50   m_depletionCallback = callback;
    52   m_depletionCallback = callback;
    51 }
    53 }
       
    54 
       
    55 void
       
    56 WifiRadioEnergyModelHelper::SetRechargedCallback (
       
    57   WifiRadioEnergyModel::WifiRadioEnergyRechargedCallback callback)
       
    58 {
       
    59   m_rechargedCallback = callback;
       
    60 }
       
    61 
       
    62 void
       
    63 WifiRadioEnergyModelHelper::SetTxCurrentModel (std::string name,
       
    64                                                std::string n0, const AttributeValue& v0,
       
    65                                                std::string n1, const AttributeValue& v1,
       
    66                                                std::string n2, const AttributeValue& v2,
       
    67                                                std::string n3, const AttributeValue& v3,
       
    68                                                std::string n4, const AttributeValue& v4,
       
    69                                                std::string n5, const AttributeValue& v5,
       
    70                                                std::string n6, const AttributeValue& v6,
       
    71                                                std::string n7, const AttributeValue& v7)
       
    72 {
       
    73   ObjectFactory factory;
       
    74   factory.SetTypeId (name);
       
    75   factory.Set (n0, v0);
       
    76   factory.Set (n1, v1);
       
    77   factory.Set (n2, v2);
       
    78   factory.Set (n3, v3);
       
    79   factory.Set (n4, v4);
       
    80   factory.Set (n5, v5);
       
    81   factory.Set (n6, v6);
       
    82   factory.Set (n7, v7);
       
    83   m_txCurrentModel = factory;
       
    84 }
       
    85 
    52 
    86 
    53 /*
    87 /*
    54  * Private function starts here.
    88  * Private function starts here.
    55  */
    89  */
    56 
    90 
    70   Ptr<WifiRadioEnergyModel> model = m_radioEnergy.Create ()->GetObject<WifiRadioEnergyModel> ();
   104   Ptr<WifiRadioEnergyModel> model = m_radioEnergy.Create ()->GetObject<WifiRadioEnergyModel> ();
    71   NS_ASSERT (model != NULL);
   105   NS_ASSERT (model != NULL);
    72   // set energy source pointer
   106   // set energy source pointer
    73   model->SetEnergySource (source);
   107   model->SetEnergySource (source);
    74   // set energy depletion callback
   108   // set energy depletion callback
    75   model->SetEnergyDepletionCallback (m_depletionCallback);
   109   // if none is specified, make a callback to WifiPhy::SetSleepMode
       
   110   Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
       
   111   Ptr<WifiPhy> wifiPhy = wifiDevice->GetPhy ();
       
   112   if (m_depletionCallback.IsNull ())
       
   113     {
       
   114       model->SetEnergyDepletionCallback (MakeCallback (&WifiPhy::SetSleepMode, wifiPhy));
       
   115     }
       
   116   else
       
   117     {
       
   118       model->SetEnergyDepletionCallback (m_depletionCallback);
       
   119     }
       
   120   // set energy recharged callback
       
   121   // if none is specified, make a callback to WifiPhy::ResumeFromSleep
       
   122   if (m_rechargedCallback.IsNull ())
       
   123     {
       
   124       model->SetEnergyRechargedCallback (MakeCallback (&WifiPhy::ResumeFromSleep, wifiPhy));
       
   125     }
       
   126   else
       
   127     {
       
   128       model->SetEnergyRechargedCallback (m_rechargedCallback);
       
   129     }
    76   // add model to device model list in energy source
   130   // add model to device model list in energy source
    77   source->AppendDeviceEnergyModel (model);
   131   source->AppendDeviceEnergyModel (model);
    78   // create and register energy model phy listener
   132   // create and register energy model phy listener
    79   Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
       
    80   Ptr<WifiPhy> wifiPhy = wifiDevice->GetPhy ();
       
    81   wifiPhy->RegisterListener (model->GetPhyListener ());
   133   wifiPhy->RegisterListener (model->GetPhyListener ());
       
   134   //
       
   135   if (m_txCurrentModel.GetTypeId ().GetUid ())
       
   136     {
       
   137       Ptr<WifiTxCurrentModel> txcurrent = m_txCurrentModel.Create<WifiTxCurrentModel> ();
       
   138       model->SetTxCurrentModel (txcurrent);
       
   139     }
    82   return model;
   140   return model;
    83 }
   141 }
    84 
   142 
    85 } // namespace ns3
   143 } // namespace ns3