A Discrete-Event Network Simulator
API
lr-wpan-phy.h
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 The Boeing Company
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:
19  * Gary Pei <guangyu.pei@boeing.com>
20  * Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
21  */
22 #ifndef LR_WPAN_PHY_H
23 #define LR_WPAN_PHY_H
24 
26 
27 #include <ns3/spectrum-phy.h>
28 #include <ns3/traced-callback.h>
29 #include <ns3/traced-value.h>
30 #include <ns3/event-id.h>
31 
32 namespace ns3 {
33 
34 class Packet;
35 class SpectrumValue;
36 class LrWpanErrorModel;
37 struct LrWpanSpectrumSignalParameters;
38 class MobilityModel;
39 class SpectrumChannel;
40 class SpectrumModel;
41 class AntennaModel;
42 class NetDevice;
43 class UniformRandomVariable;
44 
50 typedef struct
51 {
52  double averagePower;
56 
63 typedef struct
64 {
65  double bitRate;
66  double symbolRate;
68 
75 typedef struct
76 {
77  double shrPreamble;
78  double shrSfd;
79  double phr;
81 
87 typedef enum
88 {
98 
105 typedef enum
106 {
119  IEEE_802_15_4_PHY_UNSPECIFIED = 0xc // all cases not covered by ieee802.15.4
121 
122 namespace TracedValueCallback
123 {
131  typedef void (* LrWpanPhyEnumeration)(LrWpanPhyEnumeration oldValue,
132  LrWpanPhyEnumeration newValue);
133 } // namespace TracedValueCallback
134 
140 typedef enum
141 {
145  phyCCAMode = 0x03,
151 
157 typedef struct
158 {
160  uint32_t phyChannelsSupported[32];
162  uint8_t phyCCAMode;
163  uint32_t phyCurrentPage;
165  uint32_t phySHRDuration;
168 
179 
188 
197 
207 
217 typedef Callback< void, LrWpanPhyEnumeration,
220 
229 
238 typedef Callback< void, LrWpanPhyEnumeration,
240 
247 class LrWpanPhy : public SpectrumPhy
248 {
249 
250 public:
256  static TypeId GetTypeId (void);
257 
262  static const uint32_t aMaxPhyPacketSize;
263 
269  static const uint32_t aTurnaroundTime;
270 
274  LrWpanPhy (void);
275  virtual ~LrWpanPhy (void);
276 
277  // inherited from SpectrumPhy
281 
288  void SetDevice (Ptr<NetDevice> d);
289  Ptr<NetDevice> GetDevice (void) const;
290 
296  void SetAntenna (Ptr<AntennaModel> a);
298  virtual Ptr<const SpectrumModel> GetRxSpectrumModel (void) const;
299 
306 
314 
321 
327  virtual void StartRx (Ptr<SpectrumSignalParameters> params);
328 
336  void PdDataRequest (const uint32_t psduLength, Ptr<Packet> p);
337 
343  void PlmeCcaRequest (void);
344 
350  void PlmeEdRequest (void);
351 
359 
367 
376 
384 
392 
400 
408 
416 
424 
432 
438  double GetDataOrSymbolRate (bool isData);
439 
446 
453 
460  uint64_t GetPhySHRDuration (void) const;
461 
468  double GetPhySymbolsPerOctet (void) const;
469 
477  int64_t AssignStreams (int64_t stream);
478 
489  typedef void (* StateTracedCallback)
490  (Time time, LrWpanPhyEnumeration oldState, LrWpanPhyEnumeration newState);
491 
492 protected:
503 
504 private:
508  typedef std::pair<Ptr<Packet>, bool> PacketAndStatus;
509 
510  // Inherited from Object.
511  virtual void DoDispose (void);
512 
518  void ChangeTrxState (LrWpanPhyEnumeration newState);
519 
524  void SetMyPhyOption (void);
525 
533 
539  void EndTx (void);
540 
545  void CheckInterference (void);
546 
557  void EndRx (Ptr<SpectrumSignalParameters> params);
558 
566  void CancelEd (LrWpanPhyEnumeration state);
567 
572  void EndEd (void);
573 
578  void EndCca (void);
579 
584  void EndSetTRXState (void);
585 
594 
600  Time GetPpduHeaderTxTime (void);
601 
608  bool ChannelSupported (uint8_t channel);
609 
616  bool PhyIsBusy (void) const;
617 
618  // Trace sources
626 
634 
642 
650 
658 
665 
675 
680 
685 
690 
695 
700 
705 
710 
715 
716  // State variables
721 
727 
728  // Callbacks
734 
740 
746 
752 
758 
764 
770 
775 
780 
785 
790 
797 
802 
809  std::pair<Ptr<LrWpanSpectrumSignalParameters>, bool> m_currentRxPacket;
810 
818 
823 
828 
833 
838 
843 };
844 
845 
846 } // namespace ns3
847 
848 #endif /* LR_WPAN_PHY_H */
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
void SetPlmeSetTRXStateConfirmCallback(PlmeSetTRXStateConfirmCallback c)
set the callback for the end of an SetTRXState, as part of the interconnections betweenthe PHY and th...
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
The trace source fired when the phy layer drops a packet as it tries to transmit it.
Definition: lr-wpan-phy.h:641
Abstract base class for Spectrum-aware PHY layers.
Definition: spectrum-phy.h:45
Make LrWpanPhy a SpectrumPhy so we can enable the eventual modeling of device interference.
Definition: lr-wpan-phy.h:247
Callback template class.
Definition: callback.h:1273
static const uint32_t aTurnaroundTime
The turnaround time for switching the transceiver from RX to TX or vice versa.
Definition: lr-wpan-phy.h:269
void(* StateTracedCallback)(Time time, LrWpanPhyEnumeration oldState, LrWpanPhyEnumeration newState)
TracedCallback signature for Trx state change events.
Definition: lr-wpan-phy.h:490
void SetPdDataConfirmCallback(PdDataConfirmCallback c)
set the callback for the end of a TX, as part of the interconnections betweenthe PHY and the MAC...
LrWpanPhyOption GetMyPhyOption(void)
Get the currently configured PHY option.
Ptr< UniformRandomVariable > m_random
Uniform random variable stream.
Definition: lr-wpan-phy.h:842
PdDataConfirmCallback m_pdDataConfirmCallback
This callback is used to report packet transmission status to the MAC layer.
Definition: lr-wpan-phy.h:739
LrWpanPibAttributeIdentifier
IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2.
Definition: lr-wpan-phy.h:140
TracedValue< LrWpanPhyEnumeration > m_trxState
The current transceiver state.
Definition: lr-wpan-phy.h:720
void SetPdDataIndicationCallback(PdDataIndicationCallback c)
set the callback for the end of a RX, as part of the interconnections betweenthe PHY and the MAC...
Definition: lr-wpan-phy.cc:997
uint32_t phyCurrentPage
Current channel page.
Definition: lr-wpan-phy.h:163
Callback< void, LrWpanPhyEnumeration > PlmeCcaConfirmCallback
This method implements the PD SAP: PlmeCcaConfirm.
Definition: lr-wpan-phy.h:196
Forward calls to a chain of Callback.
void SetPlmeCcaConfirmCallback(PlmeCcaConfirmCallback c)
set the callback for the end of a CCA, as part of the interconnections betweenthe PHY and the MAC...
PlmeEdConfirmCallback m_plmeEdConfirmCallback
This callback is used to report ED status to the MAC.
Definition: lr-wpan-phy.h:751
void SetDevice(Ptr< NetDevice > d)
Set the associated NetDevice instance.
Definition: lr-wpan-phy.cc:217
void SetPlmeEdConfirmCallback(PlmeEdConfirmCallback c)
set the callback for the end of an ED, as part of the interconnections betweenthe PHY and the MAC...
LrWpanEdPower m_edPower
Helper value for tracking the average power during ED.
Definition: lr-wpan-phy.h:779
Time measurementLength
Total measuremement period.
Definition: lr-wpan-phy.h:54
void ChangeTrxState(LrWpanPhyEnumeration newState)
Change the PHY state to the given new state, firing the state change trace.
PacketAndStatus m_currentTxPacket
Statusinformation of the currently transmitted packet.
Definition: lr-wpan-phy.h:817
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
The trace source fired when a packet begins the reception process from the medium.
Definition: lr-wpan-phy.h:649
uint8_t phyCCAMode
CCA mode.
Definition: lr-wpan-phy.h:162
PlmeGetAttributeConfirmCallback m_plmeGetAttributeConfirmCallback
This callback is used to report requested attribute values back to the MAC.
Definition: lr-wpan-phy.h:757
void EndSetTRXState(void)
Called after applying a deferred transceiver state switch.
Ptr< SpectrumValue > m_txPsd
The transmit power spectral density.
Definition: lr-wpan-phy.h:699
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received.
Definition: lr-wpan-phy.h:664
This data structure provides number of symbols for the PPDU headers: SHR and PHR See IEEE802...
Definition: lr-wpan-phy.h:75
IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2.
Definition: lr-wpan-phy.h:157
static const LrWpanPhyPpduHeaderSymbolNumber ppduHeaderSymbolNumbers[7]
The preamble, SFD, and PHR lengths in symbols for the different PHY options.
Definition: lr-wpan-phy.h:502
double m_rxSensitivity
The receiver sensitivity.
Definition: lr-wpan-phy.h:789
double GetDataOrSymbolRate(bool isData)
implement PLME SetAttribute confirm SAP
TracedCallback< Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration > m_trxStateLogger
The trace source fired when the phy layer changes the transceiver state.
Definition: lr-wpan-phy.h:674
PlmeSetTRXStateConfirmCallback m_plmeSetTRXStateConfirmCallback
This callback is used to report transceiver state change status to the MAC.
Definition: lr-wpan-phy.h:763
static const uint32_t aMaxPhyPacketSize
The maximum packet size accepted by the PHY.
Definition: lr-wpan-phy.h:262
channel
Definition: third.py:92
static TypeId GetTypeId(void)
Get the type ID.
Definition: lr-wpan-phy.cc:74
void SetPlmeSetAttributeConfirmCallback(PlmeSetAttributeConfirmCallback c)
set the callback for the end of an SetAttribute, as part of the interconnections betweenthe PHY and t...
Ptr< SpectrumChannel > m_channel
The channel attached to this transceiver.
Definition: lr-wpan-phy.h:689
void SetChannel(Ptr< SpectrumChannel > c)
Set the channel attached to this device.
Definition: lr-wpan-phy.cc:233
Time lastUpdate
Last update time.
Definition: lr-wpan-phy.h:53
static const LrWpanPhyDataAndSymbolRates dataSymbolRates[7]
The data and symbol rates for the different PHY options.
Definition: lr-wpan-phy.h:497
void SetPlmeGetAttributeConfirmCallback(PlmeGetAttributeConfirmCallback c)
set the callback for the end of an GetAttribute, as part of the interconnections betweenthe PHY and t...
LrWpanPhyEnumeration m_trxStatePending
The next pending state to applied after the current action of the PHY is completed.
Definition: lr-wpan-phy.h:726
void SetErrorModel(Ptr< LrWpanErrorModel > e)
set the error model to use
double m_ccaPeakPower
Helper value for the peak power value during CCA.
Definition: lr-wpan-phy.h:784
Time GetPpduHeaderTxTime(void)
Calculate the time required for sending the PPDU header, that is the preamble, SFD and PHR...
uint32_t phyMaxFrameDuration
The maximum number of symbols in a frame.
Definition: lr-wpan-phy.h:164
Ptr< const SpectrumValue > GetNoisePowerSpectralDensity(void)
Get the noise power spectral density.
Ptr< LrWpanInterferenceHelper > m_signal
The accumulated signals currently received by the transceiver, including the signal of a possibly rec...
Definition: lr-wpan-phy.h:796
void SetMyPhyOption(void)
Configure the PHY option according to the current channel and channel page.
Callback< void, uint32_t, Ptr< Packet >, uint8_t > PdDataIndicationCallback
This method implements the PD SAP: PdDataIndication.
Definition: lr-wpan-phy.h:178
Ptr< AntennaModel > m_antenna
The antenna used by the transceiver.
Definition: lr-wpan-phy.h:694
void SetTxPowerSpectralDensity(Ptr< SpectrumValue > txPsd)
Set the Power Spectral Density of outgoing signals in W/Hz.
Time m_rxLastUpdate
Timestamp of the last calculation of the PER of a packet currently received.
Definition: lr-wpan-phy.h:801
Ptr< NetDevice > GetDevice(void) const
Get the associated NetDevice instance.
Definition: lr-wpan-phy.cc:201
uint8_t phyTransmitPower
Transmit power.
Definition: lr-wpan-phy.h:161
void SetAntenna(Ptr< AntennaModel > a)
Set the attached antenna.
Definition: lr-wpan-phy.cc:270
Ptr< const SpectrumValue > m_noise
The spectral density for for the noise.
Definition: lr-wpan-phy.h:704
EventId m_setTRXState
Scheduler event of a currently running deferred transceiver state switch.
Definition: lr-wpan-phy.h:832
Callback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier > PlmeSetAttributeConfirmCallback
This method implements the PD SAP: PlmeSetAttributeConfirm.
Definition: lr-wpan-phy.h:239
double shrPreamble
Number of symbols for the SHR preamble.
Definition: lr-wpan-phy.h:77
Ptr< NetDevice > m_device
The configured net device.
Definition: lr-wpan-phy.h:684
double phySymbolsPerOctet
The number of symbols per octet.
Definition: lr-wpan-phy.h:166
void PlmeGetAttributeRequest(LrWpanPibAttributeIdentifier id)
IEEE 802.15.4-2006 section 6.2.2.5 PLME-GET.request Get attributes per definition from Table 23 in se...
Definition: lr-wpan-phy.cc:652
LrWpanPhy(void)
Default constructor.
Definition: lr-wpan-phy.cc:123
Ptr< SpectrumChannel > GetChannel(void)
Get the currently attached channel.
Definition: lr-wpan-phy.cc:241
Ptr< MobilityModel > GetMobility(void)
Get the associated MobilityModel instance.
Definition: lr-wpan-phy.cc:209
EventId m_edRequest
Scheduler event of a currently running ED request.
Definition: lr-wpan-phy.h:827
std::pair< Ptr< Packet >, bool > PacketAndStatus
The second is true if the first is flagged as error/invalid.
Definition: lr-wpan-phy.h:508
std::pair< Ptr< LrWpanSpectrumSignalParameters >, bool > m_currentRxPacket
Statusinformation of the currently received packet.
Definition: lr-wpan-phy.h:809
Ptr< MobilityModel > m_mobility
The mobility model used by the PHY.
Definition: lr-wpan-phy.h:679
LrWpanPhyOption m_phyOption
The currently configured PHY type.
Definition: lr-wpan-phy.h:774
void EndCca(void)
Called at the end of the CCA.
void PlmeSetTRXStateRequest(LrWpanPhyEnumeration state)
IEEE 802.15.4-2006 section 6.2.2.7 PLME-SET-TRX-STATE.request Set PHY state.
Definition: lr-wpan-phy.cc:687
bool ChannelSupported(uint8_t channel)
Check if the given channel is supported by the PHY.
Definition: lr-wpan-phy.cc:875
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SetMobility(Ptr< MobilityModel > m)
Set the mobility model associated with this device.
Definition: lr-wpan-phy.cc:225
PdDataIndicationCallback m_pdDataIndicationCallback
This callback is used to notify incoming packets to the MAC layer.
Definition: lr-wpan-phy.h:733
double symbolRate
symbol rate
Definition: lr-wpan-phy.h:66
double averagePower
Average measured power.
Definition: lr-wpan-phy.h:52
double GetPhySymbolsPerOctet(void) const
Get the number of symbols per octet, depending on the currently selected channel. ...
PlmeSetAttributeConfirmCallback m_plmeSetAttributeConfirmCallback
This callback is used to report attribute set results back to the MAC.
Definition: lr-wpan-phy.h:769
Callback< void, LrWpanPhyEnumeration > PlmeSetTRXStateConfirmCallback
This method implements the PD SAP: PlmeSetTRXStateConfirm.
Definition: lr-wpan-phy.h:228
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
The trace source fired when a packet ends the transmission process on the medium. ...
Definition: lr-wpan-phy.h:633
Ptr< AntennaModel > GetRxAntenna(void)
Get the AntennaModel used by the NetDevice for reception.
Definition: lr-wpan-phy.cc:263
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
The trace source fired when a packet begins the transmission process on the medium.
Definition: lr-wpan-phy.h:625
void EndTx(void)
Finish the transmission of a frame.
uint32_t phySHRDuration
The duration of the synchronization header (SHR) in symbols.
Definition: lr-wpan-phy.h:165
uint64_t GetPhySHRDuration(void) const
Get the duration of the SHR (preamble and SFD) in symbols, depending on the currently selected channe...
EventId m_ccaRequest
Scheduler event of a currently running CCA request.
Definition: lr-wpan-phy.h:822
Helper structure to manage the power measurement during ED.
Definition: lr-wpan-phy.h:50
void CheckInterference(void)
Check if the interference destroys a frame currently received.
Definition: lr-wpan-phy.cc:397
virtual ~LrWpanPhy(void)
Definition: lr-wpan-phy.cc:168
EventId m_pdDataRequest
Scheduler event of a currently running data transmission request.
Definition: lr-wpan-phy.h:837
PlmeCcaConfirmCallback m_plmeCcaConfirmCallback
This callback is used to report CCA status to the MAC or CSMA/CA.
Definition: lr-wpan-phy.h:745
Ptr< LrWpanErrorModel > GetErrorModel(void) const
get the error model in use
An identifier for simulation events.
Definition: event-id.h:53
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
bool PhyIsBusy(void) const
Check if the PHY is busy, which is the case if the PHY is currently sending or receiving a frame...
void SetNoisePowerSpectralDensity(Ptr< const SpectrumValue > noisePsd)
Set the noise power spectral density.
LrWpanPhyPibAttributes m_phyPIBAttributes
The current PHY PIB attributes.
Definition: lr-wpan-phy.h:714
virtual void StartRx(Ptr< SpectrumSignalParameters > params)
Notify the SpectrumPhy instance of an incoming waveform.
Definition: lr-wpan-phy.cc:277
TracedCallback< Ptr< const Packet >, double > m_phyRxEndTrace
The trace source fired when a packet ends the reception process from the medium.
Definition: lr-wpan-phy.h:657
void EndEd(void)
Called at the end of the ED procedure.
void PlmeSetAttributeRequest(LrWpanPibAttributeIdentifier id, LrWpanPhyPibAttributes *attribute)
IEEE 802.15.4-2006 section 6.2.2.9 PLME-SET.request Set attributes per definition from Table 23 in se...
Definition: lr-wpan-phy.cc:893
void PdDataRequest(const uint32_t psduLength, Ptr< Packet > p)
IEEE 802.15.4-2006 section 6.2.1.1 PD-DATA.request Request to transfer MPDU from MAC (transmitting) ...
Definition: lr-wpan-phy.cc:523
double phr
Number of symbols for the PHR.
Definition: lr-wpan-phy.h:79
uint8_t phyCurrentChannel
The RF channel to use.
Definition: lr-wpan-phy.h:159
LrWpanPhyEnumeration
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3.
Definition: lr-wpan-phy.h:105
Callback< void, LrWpanPhyEnumeration > PdDataConfirmCallback
This method implements the PD SAP: PdDataConfirm.
Definition: lr-wpan-phy.h:187
Time CalculateTxTime(Ptr< const Packet > packet)
Calculate the time required for sending the given packet, including preamble, SFD and PHR...
void PlmeCcaRequest(void)
IEEE 802.15.4-2006 section 6.2.2.1 PLME-CCA.request Perform a CCA per section 6.9.9.
Definition: lr-wpan-phy.cc:598
void PlmeEdRequest(void)
IEEE 802.15.4-2006 section 6.2.2.3 PLME-ED.request Perform an ED per section 6.9.7.
Definition: lr-wpan-phy.cc:625
void CancelEd(LrWpanPhyEnumeration state)
Cancel an ongoing ED procedure.
virtual void DoDispose(void)
Destructor implementation.
Definition: lr-wpan-phy.cc:173
LrWpanPhyOption
This Phy option will be used to index various Tables in IEEE802.15.4-2006.
Definition: lr-wpan-phy.h:87
This data structure provides the Bit rate and Symbol rate for a given channel See IEEE802...
Definition: lr-wpan-phy.h:63
double shrSfd
Number of symbols for the SHR SFD.
Definition: lr-wpan-phy.h:78
virtual Ptr< const SpectrumModel > GetRxSpectrumModel(void) const
Definition: lr-wpan-phy.cc:249
Callback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier, LrWpanPhyPibAttributes *> PlmeGetAttributeConfirmCallback
This method implements the PD SAP: PlmeGetAttributeConfirm.
Definition: lr-wpan-phy.h:219
Ptr< LrWpanErrorModel > m_errorModel
The error model describing the bit and packet error rates.
Definition: lr-wpan-phy.h:709
a unique identifier for an interface.
Definition: type-id.h:58
Callback< void, LrWpanPhyEnumeration, uint8_t > PlmeEdConfirmCallback
This method implements the PD SAP: PlmeEdConfirm.
Definition: lr-wpan-phy.h:206
void EndRx(Ptr< SpectrumSignalParameters > params)
Finish the reception of a frame.
Definition: lr-wpan-phy.cc:443