A Discrete-Event Network Simulator
API
lr-wpan-phy-test.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 The Boeing Company
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Gary Pei <guangyu.pei@boeing.com>
18  */
19 #include <ns3/command-line.h>
20 #include <ns3/constant-position-mobility-model.h>
21 #include <ns3/log.h>
22 #include <ns3/lr-wpan-mac.h>
23 #include <ns3/lr-wpan-phy.h>
24 #include <ns3/packet.h>
25 #include <ns3/simulator.h>
26 #include <ns3/single-model-spectrum-channel.h>
27 #include <ns3/test.h>
28 
29 using namespace ns3;
30 
35 void
37 {
38  NS_LOG_UNCOND("At: " << Simulator::Now() << " Received Set TRX Confirm: " << status);
39 }
40 
47 void
48 ReceivePdDataIndication(uint32_t psduLength, Ptr<Packet> p, uint8_t lqi)
49 {
50  NS_LOG_UNCOND("At: " << Simulator::Now() << " Received frame size: " << psduLength
51  << " LQI: " << (uint16_t)lqi);
52 }
53 
59 void
61 {
62  uint32_t n = 10;
63  Ptr<Packet> p = Create<Packet>(n);
64  sender->PdDataRequest(p->GetSize(), p);
65 }
66 
67 int
68 main(int argc, char* argv[])
69 {
70  CommandLine cmd(__FILE__);
71  cmd.Parse(argc, argv);
72 
74  LogComponentEnable("LrWpanPhy", LOG_LEVEL_ALL);
75  LogComponentEnable("SingleModelSpectrumChannel", LOG_LEVEL_ALL);
76 
77  Ptr<LrWpanPhy> sender = CreateObject<LrWpanPhy>();
78  Ptr<LrWpanPhy> receiver = CreateObject<LrWpanPhy>();
79 
80  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
81  sender->SetChannel(channel);
82  receiver->SetChannel(channel);
83  channel->AddRx(sender);
84  channel->AddRx(receiver);
85 
86  // CONFIGURE MOBILITY
87  Ptr<ConstantPositionMobilityModel> senderMobility =
88  CreateObject<ConstantPositionMobilityModel>();
89  sender->SetMobility(senderMobility);
90  Ptr<ConstantPositionMobilityModel> receiverMobility =
91  CreateObject<ConstantPositionMobilityModel>();
92  receiver->SetMobility(receiverMobility);
93 
94  sender->SetPlmeSetTRXStateConfirmCallback(MakeCallback(&GetSetTRXStateConfirm));
95  receiver->SetPlmeSetTRXStateConfirmCallback(MakeCallback(&GetSetTRXStateConfirm));
96 
97  sender->PlmeSetTRXStateRequest(IEEE_802_15_4_PHY_TX_ON);
98  receiver->PlmeSetTRXStateRequest(IEEE_802_15_4_PHY_RX_ON);
99 
100  receiver->SetPdDataIndicationCallback(MakeCallback(&ReceivePdDataIndication));
101 
102  Simulator::Schedule(Seconds(1.0), &SendOnePacket, sender, receiver);
103 
104  Simulator::Stop(Seconds(10.0));
105 
106  Simulator::Run();
107 
109 
110  return 0;
111 }
Parse command-line arguments.
Definition: command-line.h:232
uint32_t GetSize() const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Definition: packet.h:861
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:571
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static Time Now()
Return the current simulation virtual time.
Definition: simulator.cc:208
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionally.
LrWpanPhyEnumeration
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3.
Definition: lr-wpan-phy.h:111
@ IEEE_802_15_4_PHY_RX_ON
Definition: lr-wpan-phy.h:118
@ IEEE_802_15_4_PHY_TX_ON
Definition: lr-wpan-phy.h:121
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
void GetSetTRXStateConfirm(LrWpanPhyEnumeration status)
Function called when a the PHY state change is confirmed.
void SendOnePacket(Ptr< LrWpanPhy > sender, Ptr< LrWpanPhy > receiver)
Send one packet.
void ReceivePdDataIndication(uint32_t psduLength, Ptr< Packet > p, uint8_t lqi)
Function called when a the PHY receives a packet.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void LogComponentEnable(const std::string &name, LogLevel level)
Enable the logging output associated with that log component.
Definition: log.cc:302
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:704
@ LOG_LEVEL_ALL
Print everything.
Definition: log.h:116
@ LOG_PREFIX_FUNC
Prefix all trace prints with function.
Definition: log.h:118
void LogComponentEnableAll(LogLevel level)
Enable the logging output for all registered log components.
Definition: log.cc:320
cmd
Definition: second.py:40
channel
Definition: third.py:88