A Discrete-Event Network Simulator
API
uan-phy-dual.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2009 University of Washington
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Leonard Tracy <lentracy@gmail.com>
19 * Andrea Sacco <andrea.sacco85@gmail.com>
20 */
21
22#include "uan-phy.h"
23#include "uan-phy-dual.h"
24#include "uan-phy-gen.h"
25#include "uan-tx-mode.h"
26#include "uan-net-device.h"
27#include "uan-channel.h"
28#include "ns3/double.h"
29#include "ns3/string.h"
30#include "ns3/log.h"
31#include "ns3/ptr.h"
32#include "ns3/traced-callback.h"
33#include "ns3/trace-source-accessor.h"
34#include "ns3/simulator.h"
35#include "uan-header-common.h"
36#include "uan-mac-rc.h"
37
38#include <cmath>
39
40
41namespace ns3 {
42
43NS_LOG_COMPONENT_DEFINE ("UanPhyDual");
44
46NS_OBJECT_ENSURE_REGISTERED (UanPhyCalcSinrDual);
47
49{
50
51}
53{
54
55}
56
59{
60 static TypeId tid = TypeId ("ns3::UanPhyCalcSinrDual")
62 .SetGroupName ("Uan")
63 .AddConstructor<UanPhyCalcSinrDual> ()
64 ;
65 return tid;
66}
67
68double
70 Time arrTime,
71 double rxPowerDb,
72 double ambNoiseDb,
73 UanTxMode mode,
74 UanPdp pdp,
75 const UanTransducer::ArrivalList &arrivalList) const
76{
77
78 if (mode.GetModType () != UanTxMode::OTHER)
79 {
80 NS_LOG_WARN ("Calculating SINR for unsupported modulation type");
81 }
82
83 double intKp = -DbToKp (rxPowerDb); // This packet is in the arrivalList
84 UanTransducer::ArrivalList::const_iterator it = arrivalList.begin ();
85 for (; it != arrivalList.end (); it++)
86 {
87 // Only count interference if there is overlap in incoming frequency
88 if (std::abs ( (double) it->GetTxMode ().GetCenterFreqHz () - (double) mode.GetCenterFreqHz ())
89 < (double)(it->GetTxMode ().GetBandwidthHz () / 2 + mode.GetBandwidthHz () / 2) - 0.5)
90 {
91 UanHeaderCommon ch, ch2;
92 if (pkt)
93 {
94 pkt->PeekHeader (ch);
95 }
96 it->GetPacket ()->PeekHeader (ch2);
97
98 if (pkt)
99 {
100 if (ch.GetType () == UanMacRc::TYPE_DATA)
101 {
102 NS_LOG_DEBUG ("Adding interferer from " << ch2.GetSrc () << " against " << ch.GetSrc () << ": PktRxMode: "
103 << mode.GetName () << " Int mode: " << it->GetTxMode ().GetName () << " Separation: "
104 << std::abs ( (double) it->GetTxMode ().GetCenterFreqHz () - (double) mode.GetCenterFreqHz ())
105 << " Combined bandwidths: " << (double)(it->GetTxMode ().GetBandwidthHz () / 2 + mode.GetBandwidthHz () / 2) - 0.5);
106 }
107 }
108 intKp += DbToKp (it->GetRxPowerDb ());
109 }
110 }
111
112 double totalIntDb = KpToDb (intKp + DbToKp (ambNoiseDb));
113
114 NS_LOG_DEBUG (Now ().As (Time::S) << " Calculating SINR: RxPower = " << rxPowerDb << " dB. Number of interferers = " << arrivalList.size () << " Interference + noise power = " << totalIntDb << " dB. SINR = " << rxPowerDb - totalIntDb << " dB.");
115 return rxPowerDb - totalIntDb;
116}
117
119 : UanPhy ()
120{
121
122 m_phy1 = CreateObject<UanPhyGen> ();
123 m_phy2 = CreateObject<UanPhyGen> ();
124
125 m_phy1->SetReceiveOkCallback (m_recOkCb);
126 m_phy2->SetReceiveOkCallback (m_recOkCb);
127
128 m_phy1->SetReceiveErrorCallback (m_recErrCb);
129 m_phy2->SetReceiveErrorCallback (m_recErrCb);
130
131}
132
134{
135}
136
137void
139{
140 if (m_phy1)
141 {
142 m_phy1->Clear ();
143 m_phy1 = 0;
144 }
145 if (m_phy2)
146 {
147 m_phy2->Clear ();
148 m_phy2 = 0;
149 }
150}
151void
153{
154 Clear ();
156}
157
158TypeId
160{
161 static TypeId tid = TypeId ("ns3::UanPhyDual")
162 .SetParent<UanPhy> ()
163 .SetGroupName ("Uan")
164 .AddConstructor<UanPhyDual> ()
165 .AddAttribute ("CcaThresholdPhy1",
166 "Aggregate energy of incoming signals to move to CCA Busy state dB of Phy1.",
167 DoubleValue (10),
169 MakeDoubleChecker<double> ())
170 .AddAttribute ("CcaThresholdPhy2",
171 "Aggregate energy of incoming signals to move to CCA Busy state dB of Phy2.",
172 DoubleValue (10),
174 MakeDoubleChecker<double> ())
175 .AddAttribute ("TxPowerPhy1",
176 "Transmission output power in dB of Phy1.",
177 DoubleValue (190),
179 MakeDoubleChecker<double> ())
180 .AddAttribute ("TxPowerPhy2",
181 "Transmission output power in dB of Phy2.",
182 DoubleValue (190),
184 MakeDoubleChecker<double> ())
185 .AddAttribute ("SupportedModesPhy1",
186 "List of modes supported by Phy1.",
188 MakeUanModesListAccessor (&UanPhyDual::GetModesPhy1, &UanPhyDual::SetModesPhy1),
189 MakeUanModesListChecker () )
190 .AddAttribute ("SupportedModesPhy2",
191 "List of modes supported by Phy2.",
193 MakeUanModesListAccessor (&UanPhyDual::GetModesPhy2, &UanPhyDual::SetModesPhy2),
194 MakeUanModesListChecker () )
195 .AddAttribute ("PerModelPhy1",
196 "Functor to calculate PER based on SINR and TxMode for Phy1.",
197 StringValue ("ns3::UanPhyPerGenDefault"),
199 MakePointerChecker<UanPhyPer> ())
200 .AddAttribute ("PerModelPhy2",
201 "Functor to calculate PER based on SINR and TxMode for Phy2.",
202 StringValue ("ns3::UanPhyPerGenDefault"),
204 MakePointerChecker<UanPhyPer> ())
205 .AddAttribute ("SinrModelPhy1",
206 "Functor to calculate SINR based on pkt arrivals and modes for Phy1.",
207 StringValue ("ns3::UanPhyCalcSinrDual"),
209 MakePointerChecker<UanPhyCalcSinr> ())
210 .AddAttribute ("SinrModelPhy2",
211 "Functor to calculate SINR based on pkt arrivals and modes for Phy2.",
212 StringValue ("ns3::UanPhyCalcSinrDual"),
214 MakePointerChecker<UanPhyCalcSinr> ())
215 .AddTraceSource ("RxOk",
216 "A packet was received successfully.",
218 "ns3::UanPhy::TracedCallback")
219 .AddTraceSource ("RxError",
220 "A packet was received unsuccessfully.",
222 "ns3::UanPhy::TracedCallback")
223 .AddTraceSource ("Tx",
224 "Packet transmission beginning.",
226 "ns3::UanPhy::TracedCallback")
227
228 ;
229
230 return tid;
231}
232
233void
235{
236 NS_LOG_DEBUG ("Not Implemented");
237}
238
239void
241{
242 NS_LOG_DEBUG ("Not Implemented");
243}
244
245void
247{
248 NS_LOG_DEBUG ("Not Implemented");
249}
250
251void
253{
254 if (modeNum <= m_phy1->GetNModes () - 1)
255 {
256 NS_LOG_DEBUG (Now ().As (Time::S) << " Sending packet on Phy1 with mode number " << modeNum);
257 m_txLogger (pkt, m_phy1->GetTxPowerDb (), m_phy1->GetMode (modeNum));
258 m_phy1->SendPacket (pkt, modeNum);
259
260 }
261 else
262 {
263 NS_LOG_DEBUG (Now ().As (Time::S) << " Sending packet on Phy2 with mode number " << modeNum - m_phy1->GetNModes ());
264 m_txLogger (pkt, m_phy2->GetTxPowerDb (), m_phy2->GetMode (modeNum - m_phy1->GetNModes ()));
265 m_phy2->SendPacket (pkt, modeNum - m_phy1->GetNModes ());
266 }
267}
268void
270{
271 m_phy1->RegisterListener (listener);
272 m_phy2->RegisterListener (listener);
273}
274
275void
276UanPhyDual::StartRxPacket (Ptr<Packet> pkt, [[maybe_unused]] double rxPowerDb, UanTxMode txMode, UanPdp pdp)
277{
278 // Not called. StartRxPacket in m_phy1 and m_phy2 are called directly from Transducer.
279}
280
281void
283{
284 m_phy1->SetReceiveOkCallback (cb);
285 m_phy2->SetReceiveOkCallback (cb);
286}
287
288void
290{
291 m_phy1->SetReceiveErrorCallback (cb);
292 m_phy2->SetReceiveErrorCallback (cb);
293}
294
295
296void
298{
299 m_phy1->SetTxPowerDb (txpwr);
300 m_phy2->SetTxPowerDb (txpwr);
301}
302
303void
305{
306 m_phy1->SetTxPowerDb (txpwr);
307}
308void
310{
311 m_phy2->SetTxPowerDb (txpwr);
312}
313
314void
316{
317 m_phy1->SetRxThresholdDb (thresh);
318 m_phy2->SetRxThresholdDb (thresh);
319}
320void
322{
323 m_phy1->SetCcaThresholdDb (thresh);
324 m_phy2->SetCcaThresholdDb (thresh);
325}
326
327void
329{
330 m_phy1->SetCcaThresholdDb (thresh);
331}
332void
334{
335 m_phy2->SetCcaThresholdDb (thresh);
336}
337
338
339double
341{
342 NS_LOG_WARN ("Warning: Dual Phy only returns TxPowerDb of Phy 1");
343 return m_phy1->GetTxPowerDb ();
344}
345
346double
348{
349 return m_phy1->GetTxPowerDb ();
350}
351
352double
354{
355 return m_phy2->GetTxPowerDb ();
356}
357
358double
360{
361 return m_phy1->GetRxThresholdDb ();
362}
363
364double
366{
367 NS_LOG_WARN ("Dual Phy only returns CCAThreshold of Phy 1");
368 return m_phy1->GetCcaThresholdDb ();
369}
370double
372{
373 return m_phy1->GetCcaThresholdDb ();
374}
375double
377{
378 return m_phy2->GetCcaThresholdDb ();
379}
380
381bool
383{
384 return m_phy1->IsStateIdle ();
385}
386bool
388{
389 return m_phy2->IsStateIdle ();
390}
391
392bool
394{
395 return m_phy1->IsStateRx ();
396}
397
398bool
400{
401 return m_phy2->IsStateRx ();
402}
403
404bool
406{
407 return m_phy1->IsStateTx ();
408}
409
412{
413 return m_phy1->GetPacketRx ();
414}
415
418{
419 return m_phy2->GetPacketRx ();
420}
421
422bool
424{
425 return m_phy2->IsStateTx ();
426}
427bool
429{
430 return m_phy1->IsStateSleep () && m_phy2->IsStateSleep ();
431}
432bool
434{
435 return m_phy1->IsStateIdle () && m_phy2->IsStateIdle ();
436}
437bool
439{
440 return !IsStateIdle () || !IsStateSleep ();
441}
442bool
444{
445 return m_phy1->IsStateRx () || m_phy2->IsStateRx ();
446}
447bool
449{
450 return m_phy1->IsStateTx () || m_phy2->IsStateTx ();
451}
452bool
454{
455 return m_phy1->IsStateCcaBusy () || m_phy2->IsStateCcaBusy ();
456}
459{
460 return m_phy1->GetChannel ();
461}
464{
465 return m_phy1->GetDevice ();
466}
467void
469{
470 m_phy1->SetChannel (channel);
471 m_phy2->SetChannel (channel);
472}
473void
475{
476 m_phy1->SetDevice (device);
477 m_phy2->SetDevice (device);
478}
479void
481{
482 m_phy1->SetMac (mac);
483 m_phy2->SetMac (mac);
484}
485void
486UanPhyDual::NotifyTransStartTx (Ptr<Packet> packet, [[maybe_unused]] double txPowerDb, UanTxMode txMode)
487{
488}
489void
491{
492 m_phy1->NotifyIntChange ();
493 m_phy2->NotifyIntChange ();
494
495}
496void
498{
499 m_phy1->SetTransducer (trans);
500 m_phy2->SetTransducer (trans);
501}
504{
505 NS_LOG_WARN ("DualPhy Returning transducer of Phy1");
506 return m_phy1->GetTransducer ();
507}
510{
511 return m_phy1->GetNModes () + m_phy2->GetNModes ();
512}
515{
516 if (n < m_phy1->GetNModes ())
517 {
518 return m_phy1->GetMode (n);
519 }
520 else
521 {
522 return m_phy2->GetMode (n - m_phy1->GetNModes ());
523 }
524}
525
528{
529
530 UanModesListValue modeValue;
531 m_phy1->GetAttribute ("SupportedModes", modeValue);
532 return modeValue.Get ();
533}
534
537{
538 UanModesListValue modeValue;
539 m_phy2->GetAttribute ("SupportedModes", modeValue);
540 return modeValue.Get ();
541}
542
543void
545{
546 m_phy1->SetAttribute ("SupportedModes", UanModesListValue (modes));
547}
548
549void
551{
552 m_phy2->SetAttribute ("SupportedModes", UanModesListValue (modes));
553}
554
557{
558 PointerValue perValue;
559 m_phy1->GetAttribute ("PerModel", perValue);
560 return perValue;
561}
562
565{
566 PointerValue perValue;
567 m_phy2->GetAttribute ("PerModel", perValue);
568 return perValue;
569}
570
571void
573{
574 m_phy1->SetAttribute ("PerModel", PointerValue (per));
575}
576
577void
579{
580 m_phy2->SetAttribute ("PerModel", PointerValue (per));
581}
582
585{
586 PointerValue sinrValue;
587 m_phy1->GetAttribute ("SinrModel", sinrValue);
588 return sinrValue;
589}
590
593{
594 PointerValue sinrValue;
595 m_phy2->GetAttribute ("SinrModel", sinrValue);
596 return sinrValue;
597}
598
599void
601{
602 m_phy1->SetAttribute ("SinrModel", PointerValue (sinr));
603}
604
605void
607{
608 m_phy2->SetAttribute ("SinrModel", PointerValue (sinr));
609}
610
611void
613{
614 NS_LOG_DEBUG (Now ().As (Time::S) << " Received packet");
615 m_recOkCb (pkt, sinr, mode);
616 m_rxOkLogger (pkt, sinr, mode);
617}
618
619void
621{
622 m_recErrCb (pkt, sinr);
623 m_rxErrLogger (pkt, sinr, m_phy1->GetMode (0));
624}
625
628{
629 NS_FATAL_ERROR ("GetPacketRx not valid for UanPhyDual. Must specify GetPhy1PacketRx or GetPhy2PacketRx");
630 return Create<Packet> ();
631}
632
633int64_t
635{
636 NS_LOG_FUNCTION (this << stream);
637 return 0;
638}
639
640}
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
virtual void DoDispose(void)
Destructor implementation.
Definition: object.cc:346
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:290
Hold objects of type Ptr<T>.
Definition: pointer.h:37
Hold variables of type string.
Definition: string.h:41
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
@ S
second
Definition: nstime.h:115
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
Common packet header fields.
uint8_t GetType(void) const
Get the header type value.
Mac8Address GetSrc(void) const
Get the source address.
@ TYPE_DATA
Data.
Definition: uan-mac-rc.h:168
Container for UanTxModes.
Definition: uan-tx-mode.h:258
AttributeValue implementation for UanModesList.
The power delay profile returned by propagation models.
Default SINR model for UanPhyDual.
Definition: uan-phy-dual.h:42
UanPhyCalcSinrDual()
Constructor.
Definition: uan-phy-dual.cc:48
static TypeId GetTypeId(void)
Register this type.
Definition: uan-phy-dual.cc:58
virtual ~UanPhyCalcSinrDual()
Destructor.
Definition: uan-phy-dual.cc:52
virtual double CalcSinrDb(Ptr< Packet > pkt, Time arrTime, double rxPowerDb, double ambNoiseDb, UanTxMode mode, UanPdp pdp, const UanTransducer::ArrivalList &arrivalList) const
Calculate the SINR value for a packet.
Definition: uan-phy-dual.cc:69
Class used for calculating SINR of packet in UanPhy.
Definition: uan-phy.h:45
double DbToKp(double db) const
Convert dB re 1 uPa to kilopascals.
Definition: uan-phy.h:82
double KpToDb(double kp) const
Convert kilopascals to dB re 1 uPa.
Definition: uan-phy.h:92
Two channel Phy.
Definition: uan-phy-dual.h:82
virtual void DoDispose()
Destructor implementation.
RxOkCallback m_recOkCb
Callback when packet received without errors.
Definition: uan-phy-dual.h:253
virtual void SetTxPowerDb(double txpwr)
Set the transmit power.
Ptr< UanPhy > m_phy1
First Phy layer.
Definition: uan-phy-dual.h:242
Ptr< UanPhyPer > GetPerModelPhy2(void) const
Get the error probability model.
void RxOkFromSubPhy(Ptr< Packet > pkt, double sinr, UanTxMode mode)
Handle callback and logger for packets received without error.
virtual Ptr< UanTransducer > GetTransducer(void)
Get the attached transducer.
virtual void SetEnergyModelCallback(DeviceEnergyModel::ChangeStateCallback callback)
Set the DeviceEnergyModel callback for UanPhy device.
virtual Ptr< UanChannel > GetChannel(void) const
Get the attached channel.
virtual uint32_t GetNModes(void)
Get the number of transmission modes supported by this Phy.
virtual void SetChannel(Ptr< UanChannel > channel)
Attach to a channel.
virtual void SendPacket(Ptr< Packet > pkt, uint32_t modeNum)
Send a packet using a specific transmission mode.
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_rxErrLogger
A packet was received unsuccessfully.
Definition: uan-phy-dual.h:249
virtual void SetReceiveErrorCallback(RxErrCallback cb)
Set the callback to be used when a packet is received with errors.
void SetPerModelPhy1(Ptr< UanPhyPer > per)
Set the error probability model.
UanModesList GetModesPhy2(void) const
Get the list of available modes.
Ptr< UanPhy > m_phy2
Second Phy layer.
Definition: uan-phy-dual.h:244
virtual void SetReceiveOkCallback(RxOkCallback cb)
Set the callback to be used when a packet is received without error.
Ptr< Packet > GetPhy2PacketRx(void) const
Get the packet currently being received.
virtual double GetCcaThresholdDb(void)
Get the CCA threshold signal strength required to detect channel busy.
virtual void EnergyDepletionHandler(void)
Handle the energy depletion event.
void SetTxPowerDbPhy1(double txpwr)
Set the transmit power.
Ptr< Packet > GetPhy1PacketRx(void) const
Get the packet currently being received.
void SetModesPhy2(UanModesList modes)
Set the available modes.
virtual void Clear(void)
Clear all pointer references.
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_txLogger
A packet was sent from this Phy.
Definition: uan-phy-dual.h:251
Ptr< UanPhyCalcSinr > GetSinrModelPhy2(void) const
Get the SINR calculator.
virtual void NotifyTransStartTx(Ptr< Packet > packet, double txPowerDb, UanTxMode txMode)
Called when a transmission is beginning on the attached transducer.
virtual void SetTransducer(Ptr< UanTransducer > trans)
Attach a transducer to this Phy.
bool IsPhy1Tx(void)
double GetCcaThresholdPhy2(void) const
Get the CCA threshold signal strength required to detect channel busy.
double GetTxPowerDbPhy2(void) const
Get the current transmit power, in dB.
double GetCcaThresholdPhy1(void) const
Get the CCA threshold signal strength required to detect channel busy.
Ptr< Packet > GetPacketRx(void) const
Get the packet currently being received.
virtual ~UanPhyDual()
Dummy destructor.
virtual void EnergyRechargeHandler(void)
Handle the energy recharge event.
Ptr< UanPhyPer > GetPerModelPhy1(void) const
Get the error probability model.
bool IsPhy1Idle(void)
virtual double GetRxThresholdDb(void)
Get the minimum received signal strength required to receive a packet without errors.
void SetPerModelPhy2(Ptr< UanPhyPer > per)
Set the error probability model.
static TypeId GetTypeId()
Register this type.
void SetSinrModelPhy2(Ptr< UanPhyCalcSinr > calcSinr)
Set the SINR calculator.
virtual bool IsStateIdle(void)
virtual void SetDevice(Ptr< UanNetDevice > device)
Set the device hosting this Phy.
virtual UanTxMode GetMode(uint32_t n)
Get a specific transmission mode.
void SetModesPhy1(UanModesList modes)
Set the available modes.
virtual void StartRxPacket(Ptr< Packet > pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp)
Packet arriving from channel: i.e.
virtual bool IsStateSleep(void)
UanPhyDual()
Constructor.
virtual bool IsStateCcaBusy(void)
virtual void SetMac(Ptr< UanMac > mac)
Set the MAC forwarding messages to this Phy.
UanModesList GetModesPhy1(void) const
Get the list of available modes.
virtual void RegisterListener(UanPhyListener *listener)
Register a UanPhyListener to be notified of common UanPhy events.
bool IsPhy2Idle(void)
void RxErrFromSubPhy(Ptr< Packet > pkt, double sinr)
Handle callback and logger for packets received with error.
virtual bool IsStateTx(void)
Ptr< UanPhyCalcSinr > GetSinrModelPhy1(void) const
Get the SINR calculator.
virtual void SetRxThresholdDb(double thresh)
Set the minimum SINR threshold to receive a packet without errors.
RxErrCallback m_recErrCb
Callback when packet received with errors.
Definition: uan-phy-dual.h:255
virtual void SetCcaThresholdDb(double thresh)
Set the threshold for detecting channel busy.
void SetCcaThresholdPhy1(double thresh)
Set the threshold for detecting channel busy.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_rxOkLogger
A packet was received successfully.
Definition: uan-phy-dual.h:247
bool IsPhy2Rx(void)
bool IsPhy2Tx(void)
void SetSinrModelPhy1(Ptr< UanPhyCalcSinr > calcSinr)
Set the SINR calculator.
void SetTxPowerDbPhy2(double txpwr)
Set the transmit power.
virtual double GetTxPowerDb(void)
Get the current transmit power, in dB.
virtual Ptr< UanNetDevice > GetDevice(void) const
Get the device hosting this Phy.
double GetTxPowerDbPhy1(void) const
Get the current transmit power, in dB.
virtual bool IsStateRx(void)
virtual void NotifyIntChange(void)
Called when there has been a change in the amount of interference this node is experiencing from othe...
bool IsPhy1Rx(void)
void SetCcaThresholdPhy2(double thresh)
Set the threshold for detecting channel busy.
virtual bool IsStateBusy(void)
static UanModesList GetDefaultModes(void)
Get the default transmission modes.
Definition: uan-phy-gen.cc:569
Base class for UAN Phy models.
Definition: uan-phy.h:179
Interface for PHY event listener.
Definition: uan-phy.h:147
std::list< UanPacketArrival > ArrivalList
List of arriving packets overlapping in time.
Abstraction of packet modulation information.
Definition: uan-tx-mode.h:42
@ OTHER
Unspecified/undefined.
Definition: uan-tx-mode.h:54
std::string GetName(void) const
Get the mode name.
Definition: uan-tx-mode.cc:75
uint32_t GetCenterFreqHz(void) const
Get the transmission center frequency.
Definition: uan-tx-mode.cc:57
uint32_t GetBandwidthHz(void) const
Get the transmission signal bandwidth.
Definition: uan-tx-mode.cc:63
ModulationType GetModType(void) const
Get the modulation type of the mode.
Definition: uan-tx-mode.cc:39
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Definition: double.h:42
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Definition: pointer.h:227
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:206
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:274
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:266
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:287
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
channel
Definition: third.py:83
mac
Definition: third.py:87