A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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/event-id.h>
30 
31 namespace ns3 {
32 
33 class Packet;
34 class SpectrumValue;
35 class LrWpanErrorModel;
36 struct LrWpanSpectrumSignalParameters;
37 class MobilityModel;
38 class SpectrumChannel;
39 class SpectrumModel;
40 class AntennaModel;
41 class NetDevice;
42 class UniformRandomVariable;
43 
47 typedef struct
48 {
49  double averagePower;
53 
58 typedef struct
59 {
60  double bitRate;
61  double symbolRate;
63 
68 typedef struct
69 {
70  double shrPreamble;
71  double shrSfd;
72  double phr;
74 
78 typedef enum
79 {
89 
94 typedef enum
95 {
108  IEEE_802_15_4_PHY_UNSPECIFIED = 0xc // all cases not covered by ieee802.15.4
110 
114 typedef enum
115 {
119  phyCCAMode = 0x03,
125 
129 typedef struct
130 {
132  uint32_t phyChannelsSupported[32];
134  uint8_t phyCCAMode;
135  uint32_t phyCurrentPage;
137  uint32_t phySHRDuration;
140 
149 
156 
163 
171 
179 typedef Callback< void, LrWpanPhyEnumeration,
182 
189 
196 typedef Callback< void, LrWpanPhyEnumeration,
198 
205 class LrWpanPhy : public SpectrumPhy
206 {
207 
208 public:
214  static TypeId GetTypeId (void);
215 
220  static const uint32_t aMaxPhyPacketSize;
221 
227  static const uint32_t aTurnaroundTime;
228 
232  LrWpanPhy (void);
233  virtual ~LrWpanPhy (void);
234 
235  // inherited from SpectrumPhy
239 
246  void SetDevice (Ptr<NetDevice> d);
247  Ptr<NetDevice> GetDevice (void);
248 
254  void SetAntenna (Ptr<AntennaModel> a);
256  virtual Ptr<const SpectrumModel> GetRxSpectrumModel (void) const;
257 
264 
272 
279 
285  virtual void StartRx (Ptr<SpectrumSignalParameters> params);
286 
294  void PdDataRequest (const uint32_t psduLength, Ptr<Packet> p);
295 
301  void PlmeCcaRequest (void);
302 
308  void PlmeEdRequest (void);
309 
317 
325 
334 
342 
350 
358 
366 
374 
382 
390 
396  double GetDataOrSymbolRate (bool isData);
397 
404 
411 
418  uint64_t GetPhySHRDuration (void) const;
419 
426  double GetPhySymbolsPerOctet (void) const;
427 
435  int64_t AssignStreams (int64_t stream);
436 
437 protected:
448 
449 private:
453  typedef std::pair<Ptr<Packet>, bool> PacketAndStatus;
454 
455  // Inherited from Object.
456  virtual void DoDispose (void);
457 
463  void ChangeTrxState (LrWpanPhyEnumeration newState);
464 
469  void SetMyPhyOption (void);
470 
478 
484  void EndTx (void);
485 
490  void CheckInterference (void);
491 
503 
511  void CancelEd (LrWpanPhyEnumeration state);
512 
517  void EndEd (void);
518 
523  void EndCca (void);
524 
529  void EndSetTRXState (void);
530 
539 
544  Time GetPpduHeaderTxTime (void);
545 
552  bool ChannelSupported (uint8_t channel);
553 
560  bool PhyIsBusy (void) const;
561 
562  // Trace sources
570 
578 
586 
594 
602 
609 
616 
621 
626 
631 
636 
641 
646 
651 
656 
657  // State variables
662 
668 
669  // Callbacks
675 
681 
687 
693 
699 
705 
711 
716 
721 
726 
731 
738 
743 
750  std::pair<Ptr<LrWpanSpectrumSignalParameters>, bool> m_currentRxPacket;
751 
759 
764 
769 
774 
779 
784 };
785 
786 
787 } // namespace ns3
788 
789 #endif /* LR_WPAN_PHY_H */
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:95
Callback< void, LrWpanPhyEnumeration, uint8_t > PlmeEdConfirmCallback
This method implements the PD SAP: PlmeEdConfirm.
Definition: lr-wpan-phy.h:170
void SetPlmeSetTRXStateConfirmCallback(PlmeSetTRXStateConfirmCallback c)
set the callback for the end of an SetTRXState, as part of the interconnections betweenthe PHY and th...
Definition: lr-wpan-phy.cc:981
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:585
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:205
Callback template class.
Definition: callback.h:972
static const uint32_t aTurnaroundTime
The turnaround time for switching the transceiver from RX to TX or vice versa.
Definition: lr-wpan-phy.h:227
void SetPdDataConfirmCallback(PdDataConfirmCallback c)
set the callback for the end of a TX, as part of the interconnections betweenthe PHY and the MAC...
Definition: lr-wpan-phy.cc:953
LrWpanPhyOption GetMyPhyOption(void)
Get the currently configured PHY option.
Ptr< UniformRandomVariable > m_random
Uniform random variable stream.
Definition: lr-wpan-phy.h:783
PdDataConfirmCallback m_pdDataConfirmCallback
This callback is used to report packet transmission status to the MAC layer.
Definition: lr-wpan-phy.h:680
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:946
uint32_t phyCurrentPage
Current channel page.
Definition: lr-wpan-phy.h:135
forward calls to a chain of CallbackAn ns3::TracedCallback has almost exactly the same API as a norma...
void SetPlmeCcaConfirmCallback(PlmeCcaConfirmCallback c)
set the callback for the end of a CCA, as part of the interconnections betweenthe PHY and the MAC...
Definition: lr-wpan-phy.cc:960
PlmeEdConfirmCallback m_plmeEdConfirmCallback
This callback is used to report ED status to the MAC.
Definition: lr-wpan-phy.h:692
void SetDevice(Ptr< NetDevice > d)
set the associated NetDevice instance
Definition: lr-wpan-phy.cc:198
void SetPlmeEdConfirmCallback(PlmeEdConfirmCallback c)
set the callback for the end of an ED, as part of the interconnections betweenthe PHY and the MAC...
Definition: lr-wpan-phy.cc:967
LrWpanEdPower m_edPower
Helper value for tracking the average power during ED.
Definition: lr-wpan-phy.h:720
Time measurementLength
Total measuremement period.
Definition: lr-wpan-phy.h:51
LrWpanPhyEnumeration m_trxState
The current transceiver state.
Definition: lr-wpan-phy.h:661
void ChangeTrxState(LrWpanPhyEnumeration newState)
Change the PHY state to the given new state, firing the state change trace.
Definition: lr-wpan-phy.cc:995
bool PhyIsBusy(void) const
Check if the PHY is busy, which is the case if the PHY is currently sending or receiving a frame...
PacketAndStatus m_currentTxPacket
Statusinformation of the currently transmitted packet.
Definition: lr-wpan-phy.h:758
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:593
uint8_t phyCCAMode
CCA mode.
Definition: lr-wpan-phy.h:134
PlmeGetAttributeConfirmCallback m_plmeGetAttributeConfirmCallback
This callback is used to report requested attribute values back to the MAC.
Definition: lr-wpan-phy.h:698
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:640
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:608
This data structure provides number of symbols for the PPDU headers: SHR and PHR See IEEE802...
Definition: lr-wpan-phy.h:68
IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2.
Definition: lr-wpan-phy.h:129
static const LrWpanPhyPpduHeaderSymbolNumber ppduHeaderSymbolNumbers[7]
The preamble, SFD, and PHR lengths in symbols for the different PHY options.
Definition: lr-wpan-phy.h:447
double m_rxSensitivity
The receiver sensitivity.
Definition: lr-wpan-phy.h:730
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:615
Callback< void, LrWpanPhyEnumeration > PlmeCcaConfirmCallback
This method implements the PD SAP: PlmeCcaConfirm.
Definition: lr-wpan-phy.h:162
PlmeSetTRXStateConfirmCallback m_plmeSetTRXStateConfirmCallback
This callback is used to report transceiver state change status to the MAC.
Definition: lr-wpan-phy.h:704
Ptr< NetDevice > GetDevice(void)
get the associated NetDevice instance
Definition: lr-wpan-phy.cc:182
Callback< void, LrWpanPhyEnumeration > PlmeSetTRXStateConfirmCallback
This method implements the PD SAP: PlmeSetTRXStateConfirm.
Definition: lr-wpan-phy.h:188
static const uint32_t aMaxPhyPacketSize
The maximum packet size accepted by the PHY.
Definition: lr-wpan-phy.h:220
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...
Definition: lr-wpan-phy.cc:988
Ptr< SpectrumChannel > m_channel
The channel attached to this transceiver.
Definition: lr-wpan-phy.h:630
void SetChannel(Ptr< SpectrumChannel > c)
Set the channel attached to this device.
Definition: lr-wpan-phy.cc:214
Time lastUpdate
Last update time.
Definition: lr-wpan-phy.h:50
static const LrWpanPhyDataAndSymbolRates dataSymbolRates[7]
The data and symbol rates for the different PHY options.
Definition: lr-wpan-phy.h:442
void SetPlmeGetAttributeConfirmCallback(PlmeGetAttributeConfirmCallback c)
set the callback for the end of an GetAttribute, as part of the interconnections betweenthe PHY and t...
Definition: lr-wpan-phy.cc:974
LrWpanPhyEnumeration m_trxStatePending
The next pending state to applied after the current action of the PHY is completed.
Definition: lr-wpan-phy.h:667
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:725
Ptr< LrWpanErrorModel > GetErrorModel(void) const
get the error model in use
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:136
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:737
void SetMyPhyOption(void)
Configure the PHY option according to the current channel and channel page.
virtual Ptr< const SpectrumModel > GetRxSpectrumModel(void) const
Definition: lr-wpan-phy.cc:230
Ptr< AntennaModel > m_antenna
The antenna used by the transceiver.
Definition: lr-wpan-phy.h:635
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:742
uint8_t phyTransmitPower
Transmit power.
Definition: lr-wpan-phy.h:133
void SetAntenna(Ptr< AntennaModel > a)
Set the attached antenna.
Definition: lr-wpan-phy.cc:251
Ptr< const SpectrumValue > m_noise
The spectral density for for the noise.
Definition: lr-wpan-phy.h:645
EventId m_setTRXState
Scheduler event of a currently running deferred transceiver state switch.
Definition: lr-wpan-phy.h:773
double shrPreamble
Number of symbols for the SHR preamble.
Definition: lr-wpan-phy.h:70
Ptr< NetDevice > m_device
The configured net device.
Definition: lr-wpan-phy.h:625
double phySymbolsPerOctet
The number of symbols per octet.
Definition: lr-wpan-phy.h:138
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:603
LrWpanPhy(void)
Default constructor.
Definition: lr-wpan-phy.cc:104
Ptr< SpectrumChannel > GetChannel(void)
Get the currently attached channel.
Definition: lr-wpan-phy.cc:222
void EndRx(Ptr< LrWpanSpectrumSignalParameters > params)
Finish the reception of a frame.
Definition: lr-wpan-phy.cc:405
Ptr< MobilityModel > GetMobility(void)
get the associated MobilityModel instance
Definition: lr-wpan-phy.cc:190
EventId m_edRequest
Scheduler event of a currently running ED request.
Definition: lr-wpan-phy.h:768
Callback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier > PlmeSetAttributeConfirmCallback
This method implements the PD SAP: PlmeSetAttributeConfirm.
Definition: lr-wpan-phy.h:197
std::pair< Ptr< Packet >, bool > PacketAndStatus
The second is true if the first is flagged as error/invalid.
Definition: lr-wpan-phy.h:453
std::pair< Ptr< LrWpanSpectrumSignalParameters >, bool > m_currentRxPacket
Statusinformation of the currently received packet.
Definition: lr-wpan-phy.h:750
Ptr< MobilityModel > m_mobility
The mobility model used by the PHY.
Definition: lr-wpan-phy.h:620
LrWpanPhyOption m_phyOption
The currently configured PHY type.
Definition: lr-wpan-phy.h:715
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:638
bool ChannelSupported(uint8_t channel)
Check if the given channel is supported by the PHY.
Definition: lr-wpan-phy.cc:826
void SetMobility(Ptr< MobilityModel > m)
Set the mobility model associated with this device.
Definition: lr-wpan-phy.cc:206
PdDataIndicationCallback m_pdDataIndicationCallback
This callback is used to notify incoming packets to the MAC layer.
Definition: lr-wpan-phy.h:674
double symbolRate
symbol rate
Definition: lr-wpan-phy.h:61
double averagePower
Average measured power.
Definition: lr-wpan-phy.h:49
PlmeSetAttributeConfirmCallback m_plmeSetAttributeConfirmCallback
This callback is used to report attribute set results back to the MAC.
Definition: lr-wpan-phy.h:710
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:577
Ptr< AntennaModel > GetRxAntenna(void)
get the AntennaModel used by the NetDevice for reception
Definition: lr-wpan-phy.cc:244
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:569
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:137
EventId m_ccaRequest
Scheduler event of a currently running CCA request.
Definition: lr-wpan-phy.h:763
Helper structure to manage the power measurement during ED.
Definition: lr-wpan-phy.h:47
void CheckInterference(void)
Check if the interference destroys a frame currently received.
Definition: lr-wpan-phy.cc:359
double GetPhySymbolsPerOctet(void) const
Get the number of symbols per octet, depending on the currently selected channel. ...
virtual ~LrWpanPhy(void)
Definition: lr-wpan-phy.cc:149
EventId m_pdDataRequest
Scheduler event of a currently running data transmission request.
Definition: lr-wpan-phy.h:778
PlmeCcaConfirmCallback m_plmeCcaConfirmCallback
This callback is used to report CCA status to the MAC or CSMA/CA.
Definition: lr-wpan-phy.h:686
an identifier for simulation events.
Definition: event-id.h:46
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
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:655
virtual void StartRx(Ptr< SpectrumSignalParameters > params)
Notify the SpectrumPhy instance of an incoming waveform.
Definition: lr-wpan-phy.cc:258
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:601
Callback< void, LrWpanPhyEnumeration > PdDataConfirmCallback
This method implements the PD SAP: PdDataConfirm.
Definition: lr-wpan-phy.h:155
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:844
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:475
double phr
Number of symbols for the PHR.
Definition: lr-wpan-phy.h:72
uint8_t phyCurrentChannel
The RF channel to use.
Definition: lr-wpan-phy.h:131
LrWpanPhyOption
This Phy option will be used to index various Tables in IEEE802.15.4-2006.
Definition: lr-wpan-phy.h:78
Callback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier, LrWpanPhyPibAttributes * > PlmeGetAttributeConfirmCallback
This method implements the PD SAP: PlmeGetAttributeConfirm.
Definition: lr-wpan-phy.h:181
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:549
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:576
void CancelEd(LrWpanPhyEnumeration state)
Cancel an ongoing ED procedure.
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
Definition: lr-wpan-phy.cc:154
This data structure provides the Bit rate and Symbol rate for a given channel See IEEE802...
Definition: lr-wpan-phy.h:58
uint64_t GetPhySHRDuration(void) const
Get the duration of the SHR (preamble and SFD) in symbols, depending on the currently selected channe...
double shrSfd
Number of symbols for the SHR SFD.
Definition: lr-wpan-phy.h:71
Ptr< LrWpanErrorModel > m_errorModel
The error model describing the bit and packet error rates.
Definition: lr-wpan-phy.h:650
a unique identifier for an interface.
Definition: type-id.h:49
Callback< void, uint32_t, Ptr< Packet >, uint8_t > PdDataIndicationCallback
This method implements the PD SAP: PdDataIndication.
Definition: lr-wpan-phy.h:148
LrWpanPhyEnumeration
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3.
Definition: lr-wpan-phy.h:94
LrWpanPibAttributeIdentifier
IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2.
Definition: lr-wpan-phy.h:114