23 #include "ns3/simple-device-energy-model.h"
24 #include "ns3/uan-net-device.h"
25 #include "ns3/simulator.h"
26 #include "ns3/packet.h"
28 #include "ns3/uan-helper.h"
29 #include "ns3/basic-energy-source-helper.h"
30 #include "ns3/acoustic-modem-energy-model-helper.h"
31 #include "ns3/acoustic-modem-energy-model.h"
32 #include "ns3/constant-position-mobility-model.h"
33 #include "ns3/uan-channel.h"
34 #include "ns3/uan-noise-model-default.h"
35 #include "ns3/uan-prop-model-ideal.h"
36 #include "ns3/uan-header-common.h"
37 #include "ns3/uan-phy.h"
56 uint32_t m_sentPackets;
57 uint32_t m_packetSize;
62 AcousticModemEnergyTestCase::AcousticModemEnergyTestCase ()
63 :
TestCase (
"Acoustic Modem energy model test case"),
71 AcousticModemEnergyTestCase::~AcousticModemEnergyTestCase ()
78 AcousticModemEnergyTestCase::SendOnePacket (Ptr<Node> node)
81 Ptr<Packet> pkt = Create<Packet> (m_packetSize);
83 Ptr<UanNetDevice> dev = node->
GetDevice (0)->GetObject<UanNetDevice> ();
84 dev->Send (pkt, dev->GetBroadcast (), 0);
89 &AcousticModemEnergyTestCase::SendOnePacket,
95 AcousticModemEnergyTestCase::RxPacket (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode,
const Address &sender)
98 m_bytesRx += pkt->GetSize ();
107 m_node = CreateObject<Node> ();
112 channel->SetPropagationModel (CreateObject<UanPropModelIdeal> ());
113 channel->SetNoiseModel (noise);
120 uint32_t datarate = devNode->GetPhy ()->GetMode (0).GetDataRateBps ();
122 double packetDuration = (m_packetSize + hd.
GetSerializedSize ()) * 8.0 / (
double) datarate;
126 eh.
Set (
"BasicEnergySourceInitialEnergyJ",
DoubleValue (10000000.0));
131 mobility->SetPosition (
Vector (0,0,-500));
145 m_gateway = CreateObject<Node> ();
151 eh.
Set (
"BasicEnergySourceInitialEnergyJ",
DoubleValue (10000000.0));
156 mobility2->SetPosition (
Vector (0,0,0));
165 dev->SetReceiveCallback (
MakeCallback (&AcousticModemEnergyTestCase::RxPacket,
172 uint32_t receivedPackets = m_bytesRx / m_packetSize;
174 double consumed1 = src1->GetInitialEnergy () - src1->GetRemainingEnergy ();
176 cont2.
Get (0)->GetObject<
AcousticModemEnergyModel> ()->GetIdlePowerW () * (m_simTime - (double) 2.0 / 3.0 - packetDuration * receivedPackets);
178 NS_TEST_ASSERT_MSG_EQ_TOL (consumed1, computed1, 1.0e-5,
179 "Incorrect gateway consumed energy!");
182 double consumed2 = src2->GetInitialEnergy () - src2->GetRemainingEnergy ();
186 NS_TEST_ASSERT_MSG_EQ_TOL (consumed2, computed2, 1.0e-5,
187 "Incorrect node consumed energy!");
198 void DepletionHandler (
void);
204 uint32_t m_callbackCount;
205 uint32_t m_packetSize;
209 AcousticModemEnergyDepletionTestCase::AcousticModemEnergyDepletionTestCase ()
210 :
TestCase (
"Acoustic Modem energy depletion test case"),
217 AcousticModemEnergyDepletionTestCase::~AcousticModemEnergyDepletionTestCase ()
223 AcousticModemEnergyDepletionTestCase::DepletionHandler (
void)
230 AcousticModemEnergyDepletionTestCase::SendOnePacket (Ptr<Node> node)
233 Ptr<Packet> pkt = Create<Packet> (m_packetSize);
235 Ptr<UanNetDevice> dev = node->GetDevice (0)->GetObject<UanNetDevice> ();
236 dev->Send (pkt, dev->GetBroadcast (), 0);
239 &AcousticModemEnergyDepletionTestCase::SendOnePacket,
248 m_node = CreateObject<Node> ();
253 channel->SetPropagationModel (CreateObject<UanPropModelIdeal> ());
254 channel->SetNoiseModel (noise);
267 mobility->SetPosition (
Vector (0,0,0));
275 MakeCallback (&AcousticModemEnergyDepletionTestCase::DepletionHandler,
this);
288 NS_TEST_ASSERT_MSG_EQ (m_callbackCount, 1,
"Callback not invoked");
303 UanEnergyModelTestSuite::UanEnergyModelTestSuite ()
311 static UanEnergyModelTestSuite g_uanEnergyModelTestSuite;
DeviceEnergyModelContainer Install(Ptr< NetDevice > device, Ptr< EnergySource > source) const
smart pointer class similar to boost::intrusive_ptr
Holds a vector of ns3::EnergySource pointers.
#define NS_LOG_COMPONENT_DEFINE(name)
Assign AcousticModemEnergyModel to uan devices.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Holds a vector of ns3::DeviceEnergyModel pointers.
a polymophic address class
WHOI micro-modem energy model.
Creates a BasicEnergySource object.
Ptr< NetDevice > GetDevice(uint32_t index) const
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void DoRun(void)
Implementation to actually run this test case.
void AggregateObject(Ptr< Object > other)
static void Destroy(void)
Ptr< DeviceEnergyModel > Get(uint32_t i) const
Get the i-th Ptr<DeviceEnergyModel> stored in this container.
EnergySourceContainer Install(Ptr< Node > node) const
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
void DoRun(void)
Implementation to actually run this test case.
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
void Set(std::string name, const AttributeValue &v)
void SetDepletionCallback(AcousticModemEnergyModel::AcousticModemEnergyDepletionCallback callback)
NetDeviceContainer Install(NodeContainer c) const
Hold an floating point type.
Ptr< T > GetObject(void) const