A Discrete-Event Network Simulator
API
uan-phy-dual.h
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 #ifndef UAN_PHY_DUAL_H
23 #define UAN_PHY_DUAL_H
24 
25 #include "ns3/uan-phy.h"
26 
27 
28 
29 namespace ns3 {
30 
31 class UanTxMode;
32 class UanModesList;
33 
42 {
43 public:
47  virtual ~UanPhyCalcSinrDual ();
48 
53  static TypeId GetTypeId (void);
54 
55  virtual double CalcSinrDb (Ptr<Packet> pkt,
56  Time arrTime,
57  double rxPowerDb,
58  double ambNoiseDb,
59  UanTxMode mode,
60  UanPdp pdp,
61  const UanTransducer::ArrivalList &arrivalList
62  ) const;
63 
64 }; // class UanPhyCalcSinrDual
65 
81 class UanPhyDual : public UanPhy
82 {
83 public:
85  UanPhyDual ();
87  virtual ~UanPhyDual ();
88 
93  static TypeId GetTypeId ();
94 
95  // Inherited methods:
97  virtual void EnergyDepletionHandler (void);
98  virtual void EnergyRechargeHandler (void);
99  virtual void SendPacket (Ptr<Packet> pkt, uint32_t modeNum);
100 
110  virtual void RegisterListener (UanPhyListener *listener);
111  virtual void StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
112  virtual void SetReceiveOkCallback (RxOkCallback cb);
113  virtual void SetReceiveErrorCallback (RxErrCallback cb);
114  virtual void SetTxPowerDb (double txpwr);
115  virtual void SetRxThresholdDb (double thresh);
116  virtual void SetCcaThresholdDb (double thresh);
117  virtual double GetTxPowerDb (void);
118  virtual double GetRxThresholdDb (void);
119  virtual double GetCcaThresholdDb (void);
120  virtual bool IsStateSleep (void);
121  virtual bool IsStateIdle (void);
122  virtual bool IsStateBusy (void);
123  virtual bool IsStateRx (void);
124  virtual bool IsStateTx (void);
125  virtual bool IsStateCcaBusy (void);
126  virtual Ptr<UanChannel> GetChannel (void) const;
127  virtual Ptr<UanNetDevice> GetDevice (void) const;
128  virtual void SetChannel (Ptr<UanChannel> channel);
129  virtual void SetDevice (Ptr<UanNetDevice> device);
130  virtual void SetMac (Ptr<UanMac> mac);
131  virtual void NotifyTransStartTx (Ptr<Packet> packet, double txPowerDb, UanTxMode txMode);
132  virtual void NotifyIntChange (void);
133  virtual void SetTransducer (Ptr<UanTransducer> trans);
134  virtual Ptr<UanTransducer> GetTransducer (void);
135  virtual uint32_t GetNModes (void);
136  virtual UanTxMode GetMode (uint32_t n);
137  virtual void Clear (void);
138  virtual void SetSleepMode (bool sleep)
139  {
140  NS_UNUSED (sleep);
142  }
143  int64_t AssignStreams (int64_t stream);
144  Ptr<Packet> GetPacketRx (void) const;
145 
146 
148  bool IsPhy1Idle (void);
150  bool IsPhy2Idle (void);
152  bool IsPhy1Rx (void);
154  bool IsPhy2Rx (void);
156  bool IsPhy1Tx (void);
158  bool IsPhy2Tx (void);
159 
160  // Attribute getters and setters
162  double GetCcaThresholdPhy1 (void) const;
164  double GetCcaThresholdPhy2 (void) const;
166  void SetCcaThresholdPhy1 (double thresh);
168  void SetCcaThresholdPhy2 (double thresh);
169 
171  double GetTxPowerDbPhy1 (void) const;
173  double GetTxPowerDbPhy2 (void) const;
175  void SetTxPowerDbPhy1 (double txpwr);
177  void SetTxPowerDbPhy2 (double txpwr);
178 
179 
185  UanModesList GetModesPhy1 (void) const;
187  UanModesList GetModesPhy2 (void) const;
188 
194  void SetModesPhy1 (UanModesList modes);
196  void SetModesPhy2 (UanModesList modes);
197 
203  Ptr<UanPhyPer> GetPerModelPhy1 (void) const;
205  Ptr<UanPhyPer> GetPerModelPhy2 (void) const;
206 
212  void SetPerModelPhy1 (Ptr<UanPhyPer> per);
214  void SetPerModelPhy2 (Ptr<UanPhyPer> per);
215 
224 
230  void SetSinrModelPhy1 (Ptr<UanPhyCalcSinr> calcSinr);
232  void SetSinrModelPhy2 (Ptr<UanPhyCalcSinr> calcSinr);
233 
234 
236  Ptr<Packet> GetPhy1PacketRx (void) const;
238  Ptr<Packet> GetPhy2PacketRx (void) const;
239 
240 
241 private:
246 
257 
258 
266  void RxOkFromSubPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode);
273  void RxErrFromSubPhy (Ptr<Packet> pkt, double sinr);
274 
275 protected:
276  virtual void DoDispose ();
277 
278 }; // class UanPhyDual
279 
280 } // namespace ns3
281 
282 #endif /* UAN_PHY_DUAL_H */
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
virtual void DoDispose()
Destructor implementation.
virtual uint32_t GetNModes(void)
Get the number of transmission modes supported by this Phy.
RxOkCallback m_recOkCb
Callback when packet received without errors.
Definition: uan-phy-dual.h:254
Ptr< UanPhyCalcSinr > GetSinrModelPhy2(void) const
Get the SINR calculator.
static TypeId GetTypeId(void)
Register this type.
Definition: uan-phy-dual.cc:58
virtual Ptr< UanTransducer > GetTransducer(void)
Get the attached transducer.
Forward calls to a chain of Callback.
virtual void SetEnergyModelCallback(DeviceEnergyModel::ChangeStateCallback callback)
Set the DeviceEnergyModel callback for UanPhy device.
virtual ~UanPhyCalcSinrDual()
Destructor.
Definition: uan-phy-dual.cc:52
Ptr< UanPhy > m_phy1
First Phy layer.
Definition: uan-phy-dual.h:243
Ptr< UanPhy > m_phy2
Second Phy layer.
Definition: uan-phy-dual.h:245
virtual void SetMac(Ptr< UanMac > mac)
Set the MAC forwarding messages to this Phy.
virtual bool IsStateSleep(void)
#define NS_UNUSED(x)
Mark a local variable as unused.
Definition: unused.h:36
virtual Ptr< UanChannel > GetChannel(void) const
Get the attached channel.
double GetCcaThresholdPhy1(void) const
Get the CCA threshold signal strength required to detect channel busy.
Container for UanTxModes.
Definition: uan-tx-mode.h:257
UanModesList GetModesPhy1(void) const
Get the list of available modes.
virtual bool IsStateTx(void)
virtual void SetCcaThresholdDb(double thresh)
Set the threshold for detecting channel busy.
bool IsPhy1Rx(void)
double GetCcaThresholdPhy2(void) const
Get the CCA threshold signal strength required to detect channel busy.
bool IsPhy2Rx(void)
Ptr< Packet > GetPacketRx(void) const
Get the packet currently being received.
virtual void SetDevice(Ptr< UanNetDevice > device)
Set the device hosting this Phy.
channel
Definition: third.py:92
virtual ~UanPhyDual()
Dummy destructor.
virtual void SetTxPowerDb(double txpwr)
Set the transmit power.
Ptr< Packet > GetPhy1PacketRx(void) const
Get the packet currently being received.
virtual bool IsStateBusy(void)
virtual double GetRxThresholdDb(void)
Get the minimum received signal strength required to receive a packet without errors.
void SetCcaThresholdPhy1(double thresh)
Set the threshold for detecting channel busy.
virtual Ptr< UanNetDevice > GetDevice(void) const
Get the device hosting this Phy.
virtual bool IsStateIdle(void)
UanPhyDual()
Constructor.
virtual void NotifyTransStartTx(Ptr< Packet > packet, double txPowerDb, UanTxMode txMode)
Called when a transmission is beginning on the attached transducer.
virtual void SendPacket(Ptr< Packet > pkt, uint32_t modeNum)
Send a packet using a specific transmission mode.
The power delay profile returned by propagation models.
Abstraction of packet modulation information.
Definition: uan-tx-mode.h:41
mac
Definition: third.py:99
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_txLogger
A packet was sent from this Phy.
Definition: uan-phy-dual.h:252
virtual void SetSleepMode(bool sleep)
Set the Phy SLEEP mode.
Definition: uan-phy-dual.h:138
Ptr< UanPhyPer > GetPerModelPhy2(void) const
Get the error probability model.
virtual void Clear(void)
Clear all pointer references.
double GetTxPowerDbPhy1(void) const
Get the current transmit power, in dB.
std::list< UanPacketArrival > ArrivalList
List of arriving packets overlapping in time.
virtual void NotifyIntChange(void)
Called when there has been a change in the amount of interference this node is experiencing from othe...
virtual void SetChannel(Ptr< UanChannel > channel)
Attach to a channel.
Ptr< Packet > GetPhy2PacketRx(void) const
Get the packet currently being received.
void SetModesPhy1(UanModesList modes)
Set the available modes.
bool IsPhy2Idle(void)
virtual void EnergyRechargeHandler(void)
Handle the energy recharge event.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
RxErrCallback m_recErrCb
Callback when packet received with errors.
Definition: uan-phy-dual.h:256
void SetPerModelPhy1(Ptr< UanPhyPer > per)
Set the error probability model.
Interface for PHY event listener.
Definition: uan-phy.h:146
virtual void StartRxPacket(Ptr< Packet > pkt, double rxPowerDb, UanTxMode txMode, UanPdp pdp)
Packet arriving from channel: i.e.
void RxOkFromSubPhy(Ptr< Packet > pkt, double sinr, UanTxMode mode)
Handle callback and logger for packets received without error.
void SetTxPowerDbPhy1(double txpwr)
Set the transmit power.
virtual bool IsStateRx(void)
void SetTxPowerDbPhy2(double txpwr)
Set the transmit power.
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_rxErrLogger
A packet was received unsuccessfully.
Definition: uan-phy-dual.h:250
void RxErrFromSubPhy(Ptr< Packet > pkt, double sinr)
Handle callback and logger for packets received with error.
Class used for calculating SINR of packet in UanPhy.
Definition: uan-phy.h:44
ns3::TracedCallback< Ptr< const Packet >, double, UanTxMode > m_rxOkLogger
A packet was received successfully.
Definition: uan-phy-dual.h:248
void SetModesPhy2(UanModesList modes)
Set the available modes.
Base class for UAN Phy models.
Definition: uan-phy.h:178
void SetSinrModelPhy2(Ptr< UanPhyCalcSinr > calcSinr)
Set the SINR calculator.
virtual void SetRxThresholdDb(double thresh)
Set the minimum SINR threshold to receive a packet without errors.
void SetSinrModelPhy1(Ptr< UanPhyCalcSinr > calcSinr)
Set the SINR calculator.
virtual void SetReceiveOkCallback(RxOkCallback cb)
Set the callback to be used when a packet is received without error.
bool IsPhy1Tx(void)
virtual void SetTransducer(Ptr< UanTransducer > trans)
Attach a transducer to this Phy.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
virtual void RegisterListener(UanPhyListener *listener)
Register a UanPhyListener to be notified of common UanPhy events.
static TypeId GetTypeId()
Register this type.
virtual void SetReceiveErrorCallback(RxErrCallback cb)
Set the callback to be used when a packet is received with errors.
Two channel Phy.
Definition: uan-phy-dual.h:81
virtual bool IsStateCcaBusy(void)
UanPhyCalcSinrDual()
Constructor.
Definition: uan-phy-dual.cc:48
Ptr< UanPhyCalcSinr > GetSinrModelPhy1(void) const
Get the SINR calculator.
bool IsPhy1Idle(void)
a unique identifier for an interface.
Definition: type-id.h:58
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
bool IsPhy2Tx(void)
void SetPerModelPhy2(Ptr< UanPhyPer > per)
Set the error probability model.
double GetTxPowerDbPhy2(void) const
Get the current transmit power, in dB.
virtual double GetCcaThresholdDb(void)
Get the CCA threshold signal strength required to detect channel busy.
Default SINR model for UanPhyDual.
Definition: uan-phy-dual.h:41
void SetCcaThresholdPhy2(double thresh)
Set the threshold for detecting channel busy.
Ptr< UanPhyPer > GetPerModelPhy1(void) const
Get the error probability model.
virtual UanTxMode GetMode(uint32_t n)
Get a specific transmission mode.
virtual void EnergyDepletionHandler(void)
Handle the energy depletion event.
UanModesList GetModesPhy2(void) const
Get the list of available modes.
virtual double GetTxPowerDb(void)
Get the current transmit power, in dB.