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 
41 namespace ns3 {
42 
43 NS_LOG_COMPONENT_DEFINE ("UanPhyDual");
44 
45 NS_OBJECT_ENSURE_REGISTERED (UanPhyDual);
46 NS_OBJECT_ENSURE_REGISTERED (UanPhyCalcSinrDual);
47 
49 {
50 
51 }
53 {
54 
55 }
56 
57 TypeId
59 {
60  static TypeId tid = TypeId ("ns3::UanPhyCalcSinrDual")
62  .SetGroupName ("Uan")
63  .AddConstructor<UanPhyCalcSinrDual> ()
64  ;
65  return tid;
66 }
67 
68 double
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 
137 void
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 }
151 void
153 {
154  Clear ();
156 }
157 
158 TypeId
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.",
190  .AddAttribute ("SupportedModesPhy2",
191  "List of modes supported by Phy2.",
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 
233 void
235 {
236  NS_LOG_DEBUG ("Not Implemented");
237 }
238 
239 void
241 {
242  NS_LOG_DEBUG ("Not Implemented");
243 }
244 
245 void
247 {
248  NS_LOG_DEBUG ("Not Implemented");
249 }
250 
251 void
252 UanPhyDual::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
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 }
268 void
270 {
271  m_phy1->RegisterListener (listener);
272  m_phy2->RegisterListener (listener);
273 }
274 
275 void
276 UanPhyDual::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 
281 void
283 {
284  m_phy1->SetReceiveOkCallback (cb);
285  m_phy2->SetReceiveOkCallback (cb);
286 }
287 
288 void
290 {
291  m_phy1->SetReceiveErrorCallback (cb);
292  m_phy2->SetReceiveErrorCallback (cb);
293 }
294 
295 
296 void
298 {
299  m_phy1->SetTxPowerDb (txpwr);
300  m_phy2->SetTxPowerDb (txpwr);
301 }
302 
303 void
305 {
306  m_phy1->SetTxPowerDb (txpwr);
307 }
308 void
310 {
311  m_phy2->SetTxPowerDb (txpwr);
312 }
313 
314 void
316 {
317  m_phy1->SetRxThresholdDb (thresh);
318  m_phy2->SetRxThresholdDb (thresh);
319 }
320 void
322 {
323  m_phy1->SetCcaThresholdDb (thresh);
324  m_phy2->SetCcaThresholdDb (thresh);
325 }
326 
327 void
329 {
330  m_phy1->SetCcaThresholdDb (thresh);
331 }
332 void
334 {
335  m_phy2->SetCcaThresholdDb (thresh);
336 }
337 
338 
339 double
341 {
342  NS_LOG_WARN ("Warning: Dual Phy only returns TxPowerDb of Phy 1");
343  return m_phy1->GetTxPowerDb ();
344 }
345 
346 double
348 {
349  return m_phy1->GetTxPowerDb ();
350 }
351 
352 double
354 {
355  return m_phy2->GetTxPowerDb ();
356 }
357 
358 double
360 {
361  return m_phy1->GetRxThresholdDb ();
362 }
363 
364 double
366 {
367  NS_LOG_WARN ("Dual Phy only returns CCAThreshold of Phy 1");
368  return m_phy1->GetCcaThresholdDb ();
369 }
370 double
372 {
373  return m_phy1->GetCcaThresholdDb ();
374 }
375 double
377 {
378  return m_phy2->GetCcaThresholdDb ();
379 }
380 
381 bool
383 {
384  return m_phy1->IsStateIdle ();
385 }
386 bool
388 {
389  return m_phy2->IsStateIdle ();
390 }
391 
392 bool
394 {
395  return m_phy1->IsStateRx ();
396 }
397 
398 bool
400 {
401  return m_phy2->IsStateRx ();
402 }
403 
404 bool
406 {
407  return m_phy1->IsStateTx ();
408 }
409 
412 {
413  return m_phy1->GetPacketRx ();
414 }
415 
418 {
419  return m_phy2->GetPacketRx ();
420 }
421 
422 bool
424 {
425  return m_phy2->IsStateTx ();
426 }
427 bool
429 {
430  return m_phy1->IsStateSleep () && m_phy2->IsStateSleep ();
431 }
432 bool
434 {
435  return m_phy1->IsStateIdle () && m_phy2->IsStateIdle ();
436 }
437 bool
439 {
440  return !IsStateIdle () || !IsStateSleep ();
441 }
442 bool
444 {
445  return m_phy1->IsStateRx () || m_phy2->IsStateRx ();
446 }
447 bool
449 {
450  return m_phy1->IsStateTx () || m_phy2->IsStateTx ();
451 }
452 bool
454 {
455  return m_phy1->IsStateCcaBusy () || m_phy2->IsStateCcaBusy ();
456 }
459 {
460  return m_phy1->GetChannel ();
461 }
464 {
465  return m_phy1->GetDevice ();
466 }
467 void
469 {
470  m_phy1->SetChannel (channel);
471  m_phy2->SetChannel (channel);
472 }
473 void
475 {
476  m_phy1->SetDevice (device);
477  m_phy2->SetDevice (device);
478 }
479 void
481 {
482  m_phy1->SetMac (mac);
483  m_phy2->SetMac (mac);
484 }
485 void
486 UanPhyDual::NotifyTransStartTx (Ptr<Packet> packet, [[maybe_unused]] double txPowerDb, UanTxMode txMode)
487 {
488 }
489 void
491 {
492  m_phy1->NotifyIntChange ();
493  m_phy2->NotifyIntChange ();
494 
495 }
496 void
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 }
508 uint32_t
510 {
511  return m_phy1->GetNModes () + m_phy2->GetNModes ();
512 }
513 UanTxMode
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 
543 void
545 {
546  m_phy1->SetAttribute ("SupportedModes", UanModesListValue (modes));
547 }
548 
549 void
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 
571 void
573 {
574  m_phy1->SetAttribute ("PerModel", PointerValue (per));
575 }
576 
577 void
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 
599 void
601 {
602  m_phy1->SetAttribute ("SinrModel", PointerValue (sinr));
603 }
604 
605 void
607 {
608  m_phy2->SetAttribute ("SinrModel", PointerValue (sinr));
609 }
610 
611 void
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 
619 void
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 
633 int64_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:103
@ S
second
Definition: nstime.h:114
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.
Definition: uan-tx-mode.h:314
UanModesList Get(void) const
Definition: uan-tx-mode.cc:303
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)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: double.h:42
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: pointer.h:227
Ptr< const AttributeChecker > MakeUanModesListChecker(void)
Definition: uan-tx-mode.cc:303
Ptr< const AttributeAccessor > MakeUanModesListAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: uan-tx-mode.h:314
#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:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#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:265
#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:92
mac
Definition: third.py:99