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 |