First Doxygen documentation batch and code cleanups.
authorSascha Jopen <jopen@cs.uni-bonn.de>
Fri, 25 Apr 2014 19:02:57 +0200
changeset 10750 8a9e91fac9c0
parent 10749 4be35e4a4a65
child 10751 56692c6da5ef
First Doxygen documentation batch and code cleanups. Moved to new random variable streams. Use Time class where times are calculated. Use std::min/max provided by standard library instead of own macros. Always return a 0 FCS value for MAC trailers without FCS calculation.
src/lr-wpan/model/lr-wpan-csmaca.cc
src/lr-wpan/model/lr-wpan-csmaca.h
src/lr-wpan/model/lr-wpan-error-model.h
src/lr-wpan/model/lr-wpan-interference-helper.cc
src/lr-wpan/model/lr-wpan-interference-helper.h
src/lr-wpan/model/lr-wpan-lqi-tag.h
src/lr-wpan/model/lr-wpan-mac-header.h
src/lr-wpan/model/lr-wpan-mac-trailer.cc
src/lr-wpan/model/lr-wpan-mac-trailer.h
src/lr-wpan/model/lr-wpan-mac.cc
src/lr-wpan/model/lr-wpan-net-device.cc
src/lr-wpan/model/lr-wpan-net-device.h
src/lr-wpan/model/lr-wpan-phy.cc
src/lr-wpan/model/lr-wpan-phy.h
src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h
src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc
src/lr-wpan/model/lr-wpan-spectrum-value-helper.h
--- a/src/lr-wpan/model/lr-wpan-csmaca.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-csmaca.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -21,8 +21,10 @@
  */
 
 #include "lr-wpan-csmaca.h"
+#include <ns3/random-variable-stream.h>
 #include <ns3/simulator.h>
 #include <ns3/log.h>
+#include <algorithm>
 
 NS_LOG_COMPONENT_DEFINE ("LrWpanCsmaCa");
 
@@ -30,14 +32,6 @@
 
 NS_OBJECT_ENSURE_REGISTERED (LrWpanCsmaCa);
 
-#ifndef MAX
-#define MAX(x,y)        (((x) > (y)) ? (x) : (y))
-#endif
-
-#ifndef MIN
-#define MIN(x,y)        (((x) < (y)) ? (x) : (y))
-#endif
-
 TypeId
 LrWpanCsmaCa::GetTypeId (void)
 {
@@ -60,7 +54,7 @@
   m_macMaxBE = 5;
   m_macMaxCSMABackoffs = 4;
   m_aUnitBackoffPeriod = 20; //20 symbols
-  m_random = UniformVariable ();
+  m_random = CreateObject<UniformRandomVariable> ();
   m_BE = m_macMinBE;
   m_ccaRequestRunning = false;
 }
@@ -174,15 +168,14 @@
   return m_aUnitBackoffPeriod;
 }
 
-//TODO:
-uint64_t
+Time
 LrWpanCsmaCa::GetTimeToNextSlot (void) const
 {
   NS_LOG_FUNCTION (this);
-  uint64_t diffT = 0;
 
+  // TODO: Calculate the offset to the next slot.
 
-  return(diffT);
+  return Seconds (0);
 
 }
 void
@@ -190,22 +183,21 @@
 
 {
   NS_LOG_FUNCTION (this);
-  uint64_t backoffBoundary = 0;
   m_NB = 0;
   if (IsSlottedCsmaCa ())
     {
       m_CW = 2;
       if (m_BLE)
         {
-          m_BE = MIN (2, m_macMinBE);
+          m_BE = std::min (static_cast<uint8_t> (2), m_macMinBE);
         }
       else
         {
           m_BE = m_macMinBE;
         }
       //TODO: for slotted, locate backoff period boundary. i.e. delay to the next slot boundary
-      backoffBoundary = GetTimeToNextSlot ();
-      m_randomBackoffEvent = Simulator::Schedule (Seconds (backoffBoundary), &LrWpanCsmaCa::RandomBackoffDelay, this);
+      Time backoffBoundary = GetTimeToNextSlot ();
+      m_randomBackoffEvent = Simulator::Schedule (backoffBoundary, &LrWpanCsmaCa::RandomBackoffDelay, this);
     }
   else
     {
@@ -247,7 +239,7 @@
 
 
   symbolRate = (uint64_t) m_mac->GetPhy ()->GetDataOrSymbolRate (isData); //symbols per second
-  backoffPeriod = (uint64_t)m_random.GetValue (0, upperBound); //num backoff periods
+  backoffPeriod = (uint64_t)m_random->GetValue (0, upperBound); //num backoff periods
   randomBackoff = MicroSeconds (backoffPeriod * GetUnitBackoffPeriod () * 1000 * 1000 / symbolRate);
 
   if (IsUnSlottedCsmaCa ())
@@ -268,8 +260,7 @@
 LrWpanCsmaCa::CanProceed ()
 {
   NS_LOG_FUNCTION (this);
-  uint64_t backoffBoundary = 0;
-  uint8_t nextCap = 0;
+
   bool canProceed = true;
 
   if (m_BLE)
@@ -282,12 +273,13 @@
   if (canProceed)
     {
       // TODO: For slotted, Perform CCA on backoff period boundary i.e. delay to next slot boundary
-      backoffBoundary = GetTimeToNextSlot ();
-      m_requestCcaEvent = Simulator::Schedule (Seconds (backoffBoundary), &LrWpanCsmaCa::RequestCCA, this);
+      Time backoffBoundary = GetTimeToNextSlot ();
+      m_requestCcaEvent = Simulator::Schedule (backoffBoundary, &LrWpanCsmaCa::RequestCCA, this);
     }
   else
     {
-      m_randomBackoffEvent = Simulator::Schedule (Seconds (nextCap), &LrWpanCsmaCa::RandomBackoffDelay, this);
+      Time nextCap = Seconds (0);
+      m_randomBackoffEvent = Simulator::Schedule (nextCap, &LrWpanCsmaCa::RandomBackoffDelay, this);
     }
 }
 
@@ -349,7 +341,7 @@
             {
               m_CW = 2;
             }
-          m_BE = MIN (m_BE + 1, m_macMaxBE);
+          m_BE = std::min (static_cast<uint16_t> (m_BE + 1), static_cast<uint16_t> (m_macMaxBE));
           m_NB++;
           if (m_NB > m_macMaxCSMABackoffs)
             {
--- a/src/lr-wpan/model/lr-wpan-csmaca.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-csmaca.h	Fri Apr 25 19:02:57 2014 +0200
@@ -24,80 +24,179 @@
 #define LR_WPAN_CSMACA_H
 
 #include <ns3/object.h>
-#include <ns3/random-variable.h>
 #include <ns3/event-id.h>
 #include <ns3/lr-wpan-mac.h>
 
 namespace ns3 {
 
-/* This method informs MAC that channel is idle or busy */
+class UniformRandomVariable;
+
+/**
+ * This method informs the MAC  whether the channel is idle or busy.
+ */
 typedef Callback<void, LrWpanMacState> LrWpanMacStateCallback;
 
 /**
  * \ingroup lr-wpan
  *
  * This class is a helper for the LrWpanMac to manage the Csma/CA
- * state machine.
+ * state machine according to IEEE 802.15.4-2006, section 7.5.1.4.
  */
 class LrWpanCsmaCa : public Object
 {
 
 public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
+  /**
+   * Default constructor.
+   */
   LrWpanCsmaCa (void);
   virtual ~LrWpanCsmaCa (void);
 
+  /**
+   * Set the MAC to which this CSMA/CA implementation is attached to.
+   *
+   * \param mac the used MAC
+   */
   void SetMac (Ptr<LrWpanMac> mac);
+
+  /**
+   * Get the MAC to which this CSMA/CA implementation is attached to.
+   *
+   * \return the used MAC
+   */
   Ptr<LrWpanMac> GetMac (void) const;
+
+  /**
+   * Configure for the use of the slotted CSMA/CA version.
+   */
   void SetSlottedCsmaCa (void);
+
+  /**
+   * Configure for the use of the unslotted CSMA/CA version.
+   */
   void SetUnSlottedCsmaCa (void);
+
+  /**
+   * Check if the slotted CSMA/CA version is being used.
+   *
+   * \return true, if slotted CSMA/CA is used, false otherwise.
+   */
   bool IsSlottedCsmaCa (void) const;
+
+  /**
+   * Check if the unslotted CSMA/CA version is being used.
+   *
+   * \return true, if unslotted CSMA/CA is used, false otherwise.
+   */
   bool IsUnSlottedCsmaCa (void) const;
 
+  /**
+   * Set the minimum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMinBE the minimum backoff exponent value
+   */
   void SetMacMinBE (uint8_t macMinBE);
+
+  /**
+   * Get the minimum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the minimum backoff exponent value
+   */
   uint8_t GetMacMinBE (void) const;
+
+  /**
+   * Set the maximum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMaxBE the maximum backoff exponent value
+   */
   void SetMacMaxBE (uint8_t macMaxBE);
+
+  /**
+   * Get the maximum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the maximum backoff exponent value
+   */
   uint8_t GetMacMaxBE (void) const;
+
+  /**
+   * Set the maximum number of backoffs.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMaxCSMABackoffs the maximum number of backoffs
+   */
   void SetMacMaxCSMABackoffs (uint8_t macMaxCSMABackoffs);
+
+  /**
+   * Get the maximum number of backoffs.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the maximum number of backoffs
+   */
   uint8_t GetMacMaxCSMABackoffs (void) const;
 
+  /**
+   * Set the number of symbols forming the basic time period used by the
+   * CSMA-CA algorithm.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   *
+   * \param unitBackoffPeriod the period length in symbols
+   */
   void SetUnitBackoffPeriod (uint64_t unitBackoffPeriod);
+
+  /**
+   * Get the number of symbols forming the basic time period used by the
+   * CSMA-CA algorithm.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   *
+   * \return the period length in symbols
+   */
   uint64_t GetUnitBackoffPeriod (void) const;
 
-  /*
-   *  Amount of time from now to the beginning of the next slot
+  /**
+   * Get the amount of time from now to the beginning of the next slot.
+   *
+   * \return time offset to the next slot
    */
-  uint64_t GetTimeToNextSlot (void) const;
+  Time GetTimeToNextSlot (void) const;
 
-  /*
+  /**
    * Start CSMA-CA algorithm (step 1), initialize NB, BE for both slotted and unslotted
    * CSMA-CA. For the slotted intialize CW plus also start on the backoff boundary
    */
   void Start (void);
 
-  /*
-   * cancel CSMA-CA algorithm
+  /**
+   * Cancel CSMA-CA algorithm.
    */
   void Cancel (void);
 
-  /*
+  /**
    * In step 2 of the CSMA-CA, perform a random backoff in the range of 0 to 2^BE -1
    */
   void RandomBackoffDelay (void);
 
-  /*
-   * In the slotted CSMA-CA, after random backoff, Determine if the remaining
-   * CSMA-CA operation can proceed ie. Can the entire transactions can be transmitted
-   * before the end of the CAP. This step is performed between step 2 and 3.
-   * This step is NOT performed for the unslotted CSMA-CA. If it can proceed
-   * function CCAconfirmed() is called.
+  /**
+   * In the slotted CSMA-CA, after random backoff, determine if the remaining
+   * CSMA-CA operation can proceed, i.e. can the entire transactions can be
+   * transmitted before the end of the CAP. This step is performed between step
+   * 2 and 3. This step is NOT performed for the unslotted CSMA-CA. If it can
+   * proceed function RequestCCA() is called.
    */
   void CanProceed (void);
 
-  /*
+  /**
    * Request the Phy to perform CCA (Step 3)
-   *
    */
   void RequestCCA (void);
 
@@ -115,33 +214,97 @@
   void PlmeCcaConfirm (LrWpanPhyEnumeration status);
 
   /**
-    * set the callback function. Used at the end of a Channel Assessment, as part of the
-    * interconnections between the CSMA-CA and the MAC. The callback
-    * lets MAc know a channel is either idle or busy
-    */
+   * Set the callback function to the MAC. Used at the end of a Channel Assessment, as part of the
+   * interconnections between the CSMA-CA and the MAC. The callback
+   * lets MAC know a channel is either idle or busy.
+   *
+   * \param macState the mac state callback
+   */
   void SetLrWpanMacStateCallback (LrWpanMacStateCallback macState);
 
 private:
   virtual void DoDispose (void);
+
+  /**
+   * The callback to inform the configured MAC of the CSMA/CA result.
+   */
   LrWpanMacStateCallback m_lrWpanMacStateCallback;
-  bool m_isSlotted;                     // beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA
-                                        // beacon order == 15 means nonbeacon-enabled
 
+  /**
+   * Beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA.
+   */
+  bool m_isSlotted;
+
+  /**
+   * The MAC instance for which this CSMAƄ/CA implemenation is configured.
+   */
   Ptr<LrWpanMac> m_mac;
-  uint8_t m_NB;                         // number of backoffs for the current transmission
-  uint8_t m_CW;                         // contention window length (used in slotted ver only)
-  uint8_t m_BE;                         // backoff exponent
-  bool m_BLE;                           // Battery Life Extension
+
+  /**
+   * Number of backoffs for the current transmission.
+   */
+  uint8_t m_NB;
+
+  /**
+   * Contention window length (used in slotted ver only).
+   */
+  uint8_t m_CW;
+
+  /**
+   * Backoff exponent.
+   */
+  uint8_t m_BE;
+
+  /**
+   * Battery Life Extension.
+   */
+  bool m_BLE;
+
+  /**
+   * Minimum backoff exponent. 0 - macMaxBE, default 3
+   */
+  uint8_t m_macMinBE;                   //
 
-  uint8_t m_macMinBE;                   //0-macMaxBE default 3
-  uint8_t m_macMaxBE;                   //3-8 default 5
-  uint8_t m_macMaxCSMABackoffs;         //0-5 default 4
-  uint64_t m_aUnitBackoffPeriod;        // 20 symbols in each backoff periods
-  UniformVariable m_random;
+  /**
+   * Maximum backoff exponent. 3 - 8, default 5
+   */
+  uint8_t m_macMaxBE;
+
+  /**
+   * Maximum number of backoffs. 0 - 5, default 4
+   */
+  uint8_t m_macMaxCSMABackoffs;
+
+  /**
+   * Number of symbols per CSMA/CA time unit, default 20 symbols.
+   */
+  uint64_t m_aUnitBackoffPeriod;
+
+  /**
+   * Uniform random variable stream.
+   */
+  Ptr<UniformRandomVariable> m_random;
 
+  /**
+   * Scheduler event for the start of the next random backoff/slot.
+   */
   EventId m_randomBackoffEvent;
+
+  /**
+   * Scheduler event when to start the CCA after a random backoff.
+   */
   EventId m_requestCcaEvent;
+
+  /**
+   * Scheduler event for checking if we can complete the transmission before the
+   * end of the CAP.
+   */
   EventId m_canProceedEvent;
+
+  /**
+   * Flag indicating that the PHY is currently running a CCA. Used to prevent
+   * reporting the channel status to the MAC while canceling the CSMA algorithm.
+   */
   bool m_ccaRequestRunning;
 };
 
--- a/src/lr-wpan/model/lr-wpan-error-model.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-error-model.h	Fri Apr 25 19:02:57 2014 +0200
@@ -34,12 +34,18 @@
 class LrWpanErrorModel : public Object
 {
 public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   LrWpanErrorModel (void);
 
   /**
-   * return chunk success rate for given SNR
+   * Return chunk success rate for given SNR.
+   *
    * \return success rate (i.e. 1 - chunk error rate)
    * \param snr SNR expressed as a power ratio (i.e. not in dB)
    * \param nbits number of bits in the chunk
@@ -47,6 +53,9 @@
   double GetChunkSuccessRate (double snr, uint32_t nbits) const;
 
 private:
+  /**
+   * Array of precalculated binomial coefficients.
+   */
   double m_binomialCoefficients[17];
 
 };
--- a/src/lr-wpan/model/lr-wpan-interference-helper.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-interference-helper.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -28,11 +28,12 @@
 namespace ns3 {
 
 LrWpanInterferenceHelper::LrWpanInterferenceHelper (Ptr<const SpectrumModel> spectrumModel) :
-    m_spectrumModel (spectrumModel), m_dirty(true)
+    m_spectrumModel (spectrumModel), m_dirty (false)
 {
+  m_signal = Create<SpectrumValue> (m_spectrumModel);
 }
 
-LrWpanInterferenceHelper::~LrWpanInterferenceHelper ()
+LrWpanInterferenceHelper::~LrWpanInterferenceHelper (void)
 {
   m_spectrumModel = 0;
   m_signal = 0;
@@ -76,7 +77,7 @@
 }
 
 void
-LrWpanInterferenceHelper::ClearSignals ()
+LrWpanInterferenceHelper::ClearSignals (void)
 {
   NS_LOG_FUNCTION (this);
 
@@ -85,7 +86,7 @@
 }
 
 Ptr<SpectrumValue>
-LrWpanInterferenceHelper::GetSignalPsd () const
+LrWpanInterferenceHelper::GetSignalPsd (void) const
 {
   NS_LOG_FUNCTION (this);
 
--- a/src/lr-wpan/model/lr-wpan-interference-helper.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-interference-helper.h	Fri Apr 25 19:02:57 2014 +0200
@@ -18,8 +18,8 @@
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
  */
-#ifndef LR_WPAN_LR_WPAN_INTERFERENCE_HELPER_H
-#define LR_WPAN_LR_WPAN_INTERFERENCE_HELPER_H
+#ifndef LR_WPAN_INTERFERENCE_HELPER_H
+#define LR_WPAN_INTERFERENCE_HELPER_H
 
 #include <ns3/simple-ref-count.h>
 #include <ns3/ptr.h>
@@ -30,24 +30,85 @@
 class SpectrumValue;
 class SpectrumModel;
 
+/**
+ * \ingroup lr-wpan
+ *
+ * \brief This class provides helper functions for LrWpan interference handling.
+ */
 class LrWpanInterferenceHelper : public SimpleRefCount<LrWpanInterferenceHelper>
 {
 public:
+  /**
+   * Create a new interference helper for the given SpectrumModel.
+   *
+   * \param spectrumModel the SpectrumModel to be used
+   */
   LrWpanInterferenceHelper (Ptr<const SpectrumModel> spectrumModel);
-  ~LrWpanInterferenceHelper ();
+
+  ~LrWpanInterferenceHelper (void);
 
+  /**
+   * Add the given signal to the set of accumulated signals. Never add the same
+   * signal more than once. The SpectrumModels of the signal and the one used
+   * for instantiation of the helper have to be the same.
+   *
+   * \param signal the signal to be added
+   * \return false, if the signal was not added because the SpectrumModel of the
+   * signal does not match the one of the helper, true otherwise.
+   */
   bool AddSignal (Ptr<const SpectrumValue> signal);
+
+  /**
+   * Remove the given signal to the set of accumulated signals.
+   *
+   * \param signal the signal to be removed
+   * \return false, if the signal was not removed (because it was not added
+   * before), true otherwise.
+   */
   bool RemoveSignal (Ptr<const SpectrumValue> signal);
-  void ClearSignals ();
-  Ptr<SpectrumValue> GetSignalPsd () const;
-  Ptr<const SpectrumModel> GetSpectrumModel () const;
+
+  /**
+   * Remove all currently accumulated signals.
+   */
+  void ClearSignals (void);
+
+  /**
+   * Get the sum of all accumulated signals.
+   *
+   * \return the sum of the signals
+   */
+  Ptr<SpectrumValue> GetSignalPsd (void) const;
+
+  /**
+   * Get the SpectrumModel used by the helper.
+   *
+   * \return the helpers SpectrumModel
+   */
+  Ptr<const SpectrumModel> GetSpectrumModel (void) const;
 private:
+
+  /**
+   * The helpers SpectrumModel.
+   */
   Ptr<const SpectrumModel> m_spectrumModel;
+
+  /**
+   * The set of accumulated signals.
+   */
   std::set<Ptr<const SpectrumValue> > m_signals;
+
+  /**
+   * The precomputed sum of all accumulated signals.
+   */
   mutable Ptr<SpectrumValue> m_signal;
+
+  /**
+   * Mark m_signal as dirty, whenever a signal is added or removed. m_signal has
+   * to be recomputed before next use.
+   */
   mutable bool m_dirty;
 };
 
 }
 
-#endif /* LR_WPAN_LR_WPAN_INTERFERENCE_HELPER_H */
+#endif /* LR_WPAN_INTERFERENCE_HELPER_H */
--- a/src/lr-wpan/model/lr-wpan-lqi-tag.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-lqi-tag.h	Fri Apr 25 19:02:57 2014 +0200
@@ -25,16 +25,20 @@
 
 namespace ns3 {
 
-class Tag;
-
 class LrWpanLqiTag : public Tag
 {
 public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
   virtual TypeId GetInstanceTypeId (void) const;
 
   /**
-   * Create a LrWpanLqiTag with the default LQI 0 .
+   * Create a LrWpanLqiTag with the default LQI 0.
    */
   LrWpanLqiTag (void);
 
@@ -51,16 +55,21 @@
   /**
    * Set the LQI to the given value.
    *
-   * @param lqi the value of the LQI to set
+   * \param lqi the value of the LQI to set
    */
   void Set (uint8_t lqi);
+
   /**
    * Get the LQI value.
    *
-   * @return the LQI value
+   * \return the LQI value
    */
   uint8_t Get (void) const;
 private:
+
+  /**
+   * The current LQI value of the tag.
+   */
   uint8_t m_lqi;
 };
 
--- a/src/lr-wpan/model/lr-wpan-mac-header.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-mac-header.h	Fri Apr 25 19:02:57 2014 +0200
@@ -232,8 +232,7 @@
   uint8_t m_auxKeyIdKeyIndex;           // 1 octet
 
 }; //LrWpanMacHeader
-}; // namespace ns-3
-#endif /* LR_WPAN_MAC_HEADER_H */
 
-// ----------------------------------------------------------------------------------------------------------
+}; // namespace ns-3
 
+#endif /* LR_WPAN_MAC_HEADER_H */
--- a/src/lr-wpan/model/lr-wpan-mac-trailer.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-mac-trailer.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -27,8 +27,10 @@
 
 NS_OBJECT_ENSURE_REGISTERED (LrWpanMacTrailer);
 
-LrWpanMacTrailer::LrWpanMacTrailer () :
-    m_fcs (0), m_calcFcs (false)
+const uint16_t LrWpanMacTrailer::LR_WPAN_MAC_FCS_LENGTH = 2;
+
+LrWpanMacTrailer::LrWpanMacTrailer (void)
+  : m_fcs (0), m_calcFcs (false)
 {
 }
 
@@ -57,23 +59,23 @@
 uint32_t
 LrWpanMacTrailer::GetSerializedSize (void) const
 {
-  return LRWPAN_MAC_FCS_LENGTH;
+  return LR_WPAN_MAC_FCS_LENGTH;
 }
 
 void
 LrWpanMacTrailer::Serialize (Buffer::Iterator start) const
 {
-  start.Prev (LRWPAN_MAC_FCS_LENGTH);
+  start.Prev (LR_WPAN_MAC_FCS_LENGTH);
   start.WriteU16 (m_fcs);
 }
 
 uint32_t
 LrWpanMacTrailer::Deserialize (Buffer::Iterator start)
 {
-  start.Prev (LRWPAN_MAC_FCS_LENGTH);
+  start.Prev (LR_WPAN_MAC_FCS_LENGTH);
   m_fcs = start.ReadU16 ();
 
-  return LRWPAN_MAC_FCS_LENGTH;
+  return LR_WPAN_MAC_FCS_LENGTH;
 }
 
 uint16_t
@@ -124,10 +126,18 @@
 LrWpanMacTrailer::EnableFcs (bool enable)
 {
   m_calcFcs = enable;
+  if (!enable)
+    {
+      m_fcs = 0;
+    }
 }
 
-/* CRC16-CCITT with a generator polynomial = ^16 + ^12 + ^5 + 1,
- * LSB first and initial value = 0x0000  */
+bool
+LrWpanMacTrailer::IsFcsEnabled (void)
+{
+  return m_calcFcs;
+}
+
 uint16_t
 LrWpanMacTrailer::GenerateCrc16 (uint8_t *data, int length)
 {
--- a/src/lr-wpan/model/lr-wpan-mac-trailer.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-mac-trailer.h	Fri Apr 25 19:02:57 2014 +0200
@@ -31,32 +31,101 @@
 class Packet;
 
 /**
- * The length in octets of the IEEE 802.15.4 MAC FCS field
+ * \ingroup lr-wpan
+ *
+ * Represent the Mac Trailer with the Frame Check Sequence field.
  */
-
-static const uint16_t LRWPAN_MAC_FCS_LENGTH = 2;
-
 class LrWpanMacTrailer : public Trailer
 {
 public:
-  LrWpanMacTrailer ();
+  /**
+   * The length in octets of the IEEE 802.15.4 MAC FCS field
+   */
+  static const uint16_t LR_WPAN_MAC_FCS_LENGTH;
 
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
+
+  /**
+   * Default constructor for a MAC trailer with disabled FCS calculation.
+   */
+  LrWpanMacTrailer (void);
+
+  // Inherited from the Trailer class.
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
   virtual uint32_t GetSerializedSize (void) const;
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
+  /**
+   * Get this trailers FCS value. If FCS calculation is disabled for this
+   * trailer, the returned value is always 0.
+   *
+   * \return the FCS value.
+   */
   uint16_t GetFcs (void) const;
+
+  /**
+   * Calculate and set the FCS value based on the given packet.
+   *
+   * \param p the packet for which the FCS should be calculated
+   */
   void SetFcs (Ptr<const Packet> p);
+
+  /**
+   * Check the FCS of a given packet against the FCS value stored in the
+   * trailer. The packet itself should contain no trailer. If FCS calculation is
+   * disabled for this trailer, CheckFcs() will always return true.
+   *
+   * \param the packet to be checked
+   * \return false, if the FCS values do not match, true otherwise
+   */
   bool CheckFcs (Ptr<const Packet> p);
+
+  /**
+   * Enable or disable FCS calculation for this trailer.
+   *
+   * \param enable flag, indicating if FCS calculation should be enabled or not
+   */
   void EnableFcs (bool enable);
 
+  /**
+   * Query if FCS calculation is enabled for this trailer.
+   *
+   * \return true, if FCS calculation is enabled, false otherwise.
+   */
+  bool IsFcsEnabled (void);
+
 private:
-  uint16_t m_fcs;
-  bool m_calcFcs;
+  /**
+   * Calculate the 16-bit FCS value.
+   * CRC16-CCITT with a generator polynomial = ^16 + ^12 + ^5 + 1, LSB first and
+   * initial value = 0x0000.
+   *
+   * \param data the checksum will be calculated over this data
+   * \param length the length of the data
+   * \return the checksum
+   */
   uint16_t GenerateCrc16 (uint8_t *data, int length);
+
+  /**
+   * The FCS value stored in this trailer.
+   */
+  uint16_t m_fcs;
+
+  /**
+   * Only if m_calcFcs is true, FCS values will be calculated and used in the
+   * trailer
+   */
+  bool m_calcFcs;
+
 };
+
 } // namespace ns3
+
 #endif /* LR_WPAN_MAC_TRAILER_H */
--- a/src/lr-wpan/model/lr-wpan-mac.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-mac.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -31,6 +31,8 @@
 #include <ns3/uinteger.h>
 #include <ns3/node.h>
 #include <ns3/packet.h>
+#include <ns3/random-variable-stream.h>
+#include <ns3/double.h>
 
 NS_LOG_COMPONENT_DEFINE ("LrWpanMac");
 
@@ -106,9 +108,10 @@
   m_retransmission = 0;
   m_txPkt = 0;
 
-  UniformVariable uniformVar;
-  uniformVar = UniformVariable (0, 255);
-  m_macDsn = SequenceNumber8 (uniformVar.GetValue ());
+  Ptr<UniformRandomVariable> uniformVar = CreateObject<UniformRandomVariable> ();
+  uniformVar->SetAttribute ("Min", DoubleValue (0.0));
+  uniformVar->SetAttribute ("Max", DoubleValue (255.0));
+  m_macDsn = SequenceNumber8 (uniformVar->GetValue ());
   m_shortAddress = Mac16Address ("00:00");
 }
 
--- a/src/lr-wpan/model/lr-wpan-net-device.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-net-device.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -225,6 +225,7 @@
   m_linkUp = true;
   m_linkChanges ();
 }
+
 void
 LrWpanNetDevice::LinkDown (void)
 {
@@ -233,13 +234,13 @@
   m_linkChanges ();
 }
 
-
 Ptr<SpectrumChannel>
 LrWpanNetDevice::DoGetChannel (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_phy->GetChannel ();
 }
+
 void
 LrWpanNetDevice::SetAddress (Address address)
 {
--- a/src/lr-wpan/model/lr-wpan-net-device.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-net-device.h	Fri Apr 25 19:02:57 2014 +0200
@@ -38,11 +38,11 @@
 /**
  * \ingroup lr-wpan
  *
- * \brief Network layer to device interface
+ * \brief Network layer to device interface.
  *
- * The ns3::NetDevice includes IP-specific API such as GetMulticast(), and
- * the Send() and SendTo() methods do not map well the the 802.15.4 MAC
- * MCPS DataRequest primitive.  So, the basic design is to provide, as
+ * The ns3::NetDevice includes IP-specific API such as GetMulticast(), Send()
+ * and SendTo() methods, which do not map well the the 802.15.4 MAC MCPS
+ * DataRequest primitive.  So, the basic design is to provide, as
  * much as makes sense, the class ns3::NetDevice API, but rely on the user
  * accessing the LrWpanMac pointer to make 802.15.4-specific API calls.
  * As such, this is really just an encapsulating class.
@@ -50,24 +50,64 @@
 class LrWpanNetDevice : public NetDevice
 {
 public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   LrWpanNetDevice (void);
   virtual ~LrWpanNetDevice (void);
 
+  /**
+   * Set the MAC to be used by this NetDevice.
+   *
+   * \param mac the MAC to be used
+   */
   void SetMac (Ptr<LrWpanMac> mac);
+
+  /**
+   * Set the PHY to be used by the MAC and this NetDevice.
+   *
+   * \param phy the PHY to be used
+   */
   void SetPhy (Ptr<LrWpanPhy> phy);
-  void SetCsmaCa (Ptr<LrWpanCsmaCa> csmaca);
-  void SetChannel (Ptr<SpectrumChannel> channel);
+
   /**
-   * We disallow the conventional Send/SendFrom methods in this NetDevice,
-   * preferring instead that the higher layer access the LrWpanMac object
-   * directly (with its specific API).
+   * Set the CSMA/CA implementation to be used by the MAC and this NetDevice.
    *
-   * \return pointer to the LrWpanMac/Phy/Csmaca object
+   * \param csmaca the CSMA/CA implementation to be used
+   */
+  void SetCsmaCa (Ptr<LrWpanCsmaCa> csmaca);
+
+  /**
+   * Set the channel to which the NetDevice, and therefore the PHY, should be
+   * attached to.
+   *
+   * \param channel the channel to be used
+   */
+  void SetChannel (Ptr<SpectrumChannel> channel);
+
+  /**
+   * Get the MAC used by this NetDevice.
+   *
+   * \return the MAC object
    */
   Ptr<LrWpanMac> GetMac (void) const;
+
+  /**
+   * Get the PHY used by this NetDevice.
+   *
+   * \return the PHY object
+   */
   Ptr<LrWpanPhy> GetPhy (void) const;
+
+  /**
+   * Get the CSMA/CA implementation used by this NetDevice.
+   *
+   * \return the CSMA/CA implementation object
+   */
   Ptr<LrWpanCsmaCa> GetCsmaCa (void) const;
 
   // From class NetDevice
@@ -103,27 +143,93 @@
   virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
   virtual bool SupportsSendFrom (void) const;
 
+  /**
+   * The callback used by the MAC to hand over incoming packets to the
+   * NetDevice. This callback will in turn use the ReceiveCallback set by
+   * SetReceiveCallback() to notify upper layers.
+   *
+   * \param params 802.15.4 specific parameters, including source and destination addresses
+   * \param pkt the packet do be delivered
+   */
   void McpsDataIndication (McpsDataIndicationParams params, Ptr<Packet> pkt);
 
 private:
+  // Inherited from NetDevice/Object
   virtual void DoDispose (void);
   virtual void DoStart (void);
+
+  /**
+   * Mark NetDevice link as up.
+   */
   void LinkUp (void);
+
+  /**
+   * Mark NetDevice link as down.
+   */
   void LinkDown (void);
+
+  /**
+   * Attribute accessor method for the "Channel" attribute.
+   *
+   * \return the channel to which this NetDevice is attached
+   */
   Ptr<SpectrumChannel> DoGetChannel (void) const;
+
+  /**
+   * Configure PHY, MAC and CSMA/CA.
+   */
   void CompleteConfig (void);
 
+  /**
+   * The MAC for this NetDevice.
+   */
   Ptr<LrWpanMac> m_mac;
+
+  /**
+   * The PHY for this NetDevice.
+   */
   Ptr<LrWpanPhy> m_phy;
+
+  /**
+   * The CSMA/CA implementation for this NetDevice.
+   */
   Ptr<LrWpanCsmaCa> m_csmaca;
+
+  /**
+   * The node associated with this NetDevice.
+   */
   Ptr<Node> m_node;
+
+  /**
+   * True if MAC, PHY and CSMA/CA where successfully configured and the
+   * NetDevice is ready for being used.
+   */
   bool m_configComplete;
+
+  /**
+   * Configure the NetDevice to request MAC layer acknowledgements when sending
+   * packets using the Send() API.
+   */
   bool m_useAcks;
 
+  /**
+   * Is the link/device currently up and running?
+   */
   bool m_linkUp;
+
+  /**
+   * The interface index of this NetDevice.
+   */
   uint32_t m_ifIndex;
 
+  /**
+   * Trace source for link up/down changes.
+   */
   TracedCallback<> m_linkChanges;
+
+  /**
+   * Upper layer callback used for notification of new data packet arrivals.
+   */
   ReceiveCallback m_receiveCallback;
 };
 
--- a/src/lr-wpan/model/lr-wpan-phy.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-phy.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -35,6 +35,8 @@
 #include <ns3/packet.h>
 #include <ns3/packet-burst.h>
 #include <ns3/net-device.h>
+#include <ns3/random-variable-stream.h>
+#include <ns3/double.h>
 
 NS_LOG_COMPONENT_DEFINE ("LrWpanPhy");
 
@@ -136,6 +138,11 @@
   m_currentTxPacket = std::make_pair (none_packet, true);
   m_errorModel = 0;
 
+  m_random = CreateObject<UniformRandomVariable> ();
+  m_random->SetAttribute ("Min", DoubleValue (0.0));
+  m_random->SetAttribute ("Max", DoubleValue (1.0));
+
+
   ChangeTrxState (IEEE_802_15_4_PHY_TRX_OFF);
 }
 
@@ -379,7 +386,7 @@
           tag.Set (lqi - (per * lqi));
           currentPacket->ReplacePacketTag (tag);
 
-          if (m_random.GetValue () < per)
+          if (m_random->GetValue () < per)
             {
               // The packet was destroyed, drop the packet after reception.
               m_currentRxPacket.second = true;
--- a/src/lr-wpan/model/lr-wpan-phy.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-phy.h	Fri Apr 25 19:02:57 2014 +0200
@@ -27,7 +27,6 @@
 #include <ns3/spectrum-phy.h>
 #include <ns3/traced-callback.h>
 #include <ns3/event-id.h>
-#include <ns3/random-variable.h>
 
 namespace ns3 {
 
@@ -40,6 +39,7 @@
 class SpectrumModel;
 class AntennaModel;
 class NetDevice;
+class UniformRandomVariable;
 
 /**
  * Helper structure to manage the power measurement during ED.
@@ -205,50 +205,79 @@
 {
 
 public:
-  // The second is true if the first is flagged as error
-  typedef std::pair<Ptr<Packet>, bool>  PacketAndStatus;
-
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
-  static const uint32_t aMaxPhyPacketSize; // Table 22 in section 6.4.1 of ieee802.15.4
-  static const uint32_t aTurnaroundTime;   // Table 22 in section 6.4.1 of ieee802.15.4
+  /**
+   * The maximum packet size accepted by the PHY.
+   * See Table 22 in section 6.4.1 of IEEE 802.15.4-2006
+   */
+  static const uint32_t aMaxPhyPacketSize;
 
-  LrWpanPhy ();
-  virtual ~LrWpanPhy ();
+  /**
+   * The turnaround time for switching the transceiver from RX to TX or vice
+   * versa.
+   * See Table 22 in section 6.4.1 of IEEE 802.15.4-2006
+   */
+  static const uint32_t aTurnaroundTime;
+
+  /**
+   * Default constructor.
+   */
+  LrWpanPhy (void);
+  virtual ~LrWpanPhy (void);
 
   // inherited from SpectrumPhy
   void SetMobility (Ptr<MobilityModel> m);
-  Ptr<MobilityModel> GetMobility ();
+  Ptr<MobilityModel> GetMobility (void);
   void SetChannel (Ptr<SpectrumChannel> c);
+
+  /**
+   * Get the currently attached channel.
+   *
+   * \return the channel
+   */
   Ptr<SpectrumChannel> GetChannel (void);
   void SetDevice (Ptr<NetDevice> d);
-  Ptr<NetDevice> GetDevice ();
-  void SetAntenna (Ptr<AntennaModel> a);
-  Ptr<AntennaModel> GetRxAntenna ();
-  virtual Ptr<const SpectrumModel> GetRxSpectrumModel () const;
+  Ptr<NetDevice> GetDevice (void);
 
   /**
-   * set the Power Spectral Density of outgoing signals in W/Hz.
+   * Set the attached antenna.
    *
-   * @param txPsd
+   * \param a the antenna
+   */
+  void SetAntenna (Ptr<AntennaModel> a);
+  Ptr<AntennaModel> GetRxAntenna (void);
+  virtual Ptr<const SpectrumModel> GetRxSpectrumModel (void) const;
+
+  /**
+   * Set the Power Spectral Density of outgoing signals in W/Hz.
+   *
+   * @param txPsd the Power Spectral Density value
    */
   void SetTxPowerSpectralDensity (Ptr<SpectrumValue> txPsd);
 
   /**
-   * \brief set the noise power spectral density
+   * Set the noise power spectral density.
+   *
    * @param noisePsd the Noise Power Spectral Density in power units
    * (Watt, Pascal...) per Hz.
    */
   void SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd);
 
   /**
-   * \brief get the noise power spectral density
+   * Get the noise power spectral density.
+   *
    * @return the Noise Power Spectral Density
    */
   Ptr<const SpectrumValue> GetNoisePowerSpectralDensity (void);
 
   /**
-    * Notify the SpectrumPhy instance of an incoming waveform
+    * Notify the SpectrumPhy instance of an incoming waveform.
     *
     * @param params the SpectrumSignalParameters associated with the incoming waveform
     */
@@ -379,45 +408,145 @@
    */
   Ptr<LrWpanErrorModel> GetErrorModel (void) const;
   
+  /**
+   * Get the duration of the SHR (preamble and SFD) in symbols, depending on
+   * the currently selected channel.
+   *
+   * \return the SHR duration in symbols
+   */
   uint64_t GetPhySHRDuration (void) const;
+
+  /**
+   * Get the number of symbols per octet, depending on the currently selected
+   * channel.
+   *
+   * \return the number of symbols per octet
+   */
   double GetPhySymbolsPerOctet (void) const;
   
 protected:
+  /**
+   * The data and symbol rates for the different PHY options.
+   * See Table 2 in section 6.1.2 IEEE 802.15.4-2006
+   */
   static const LrWpanPhyDataAndSymbolRates dataSymbolRates[7];
+  /**
+   * The preamble, SFD, and PHR lengths in symbols for the different PHY options.
+   * See Table 19 and Table 20 in section 6.3 IEEE 802.15.4-2006
+   */
   static const LrWpanPhyPpduHeaderSymbolNumber ppduHeaderSymbolNumbers[7];
 
 private:
+  /**
+   * The second is true if the first is flagged as error/invalid.
+   */
+  typedef std::pair<Ptr<Packet>, bool>  PacketAndStatus;
+
+  // Inherited from Object.
   virtual void DoDispose (void);
-  void ChangeState (LrWpanPhyEnumeration newState);
+
+  /**
+   * Change the PHY state to the given new state, firing the state change trace.
+   *
+   * \param newState the new state
+   */
   void ChangeTrxState (LrWpanPhyEnumeration newState);
+
+  /**
+   * Configure the PHY option according to the current channel and channel page.
+   * See IEEE 802.15.4-2006, section 6.1.2, Table 2.
+   */
   void SetMyPhyOption (void);
+
+  /**
+   * Get the currently configured PHY option.
+   * See IEEE 802.15.4-2006, section 6.1.2, Table 2.
+   *
+   * \return the PHY option
+   */
   LrWpanPhyOption GetMyPhyOption (void);
-  void EndTx ();
-  void CheckInterference ();
+
+  /**
+   * Finish the transmission of a frame. This is called at the end of a frame
+   * transmission, applying possibly pending PHY state changes and fireing the
+   * appropriate trace sources and confirm callbacks to the MAC.
+   */
+  void EndTx (void);
+
+  /**
+   * Check if the interference destroys a frame currently received. Called
+   * whenever a change in interference is detected.
+   */
+  void CheckInterference (void);
 
+  /**
+   * Finish the reception of a frame. This is called at the end of a frame
+   * reception, applying possibly pending PHY state changes and fireing the
+   * appropriate trace sources and indication callbacks to the MAC. A frame
+   * destroyed by noise/interference is dropped here, but not during reception.
+   * This method is also called for every packet which only contributes to
+   * interference.
+   *
+   * \param params signal parameters of the packet
+   */
   void EndRx (Ptr<LrWpanSpectrumSignalParameters> params);
+
+  /**
+   * Cancel an ongoing ED procedure. This is called when the transceiver is
+   * switched off or set to TX mode. This calls the appropiate confirm callback
+   * of the MAC.
+   *
+   * \param state the new state which is the cause for canceling ED
+   */
   void CancelEd (LrWpanPhyEnumeration state);
 
-  void EndEd ();
-  void EndCca ();
-  void EndSetTRXState ();
+  /**
+   * Called at the end of the ED procedure. The average energy detected is
+   * reported to the MAC.
+   */
+  void EndEd (void);
+
+  /**
+   * Called at the end of the CCA. The channel condition (busy or idle) is
+   * reported to the MAC or CSMA/CA.
+   */
+  void EndCca (void);
+
+  /**
+   * Called after applying a deferred transceiver state switch. The result of
+   * the state switch is reported to the MAC.
+   */
+  void EndSetTRXState (void);
+
+  /**
+   * Calculate the time required for sending the given packet, including
+   * preamble, SFD and PHR.
+   *
+   * \param packet the packet for which the transmission time should be calculated
+   */
   Time CalculateTxTime (Ptr<const Packet> packet);
+
+  /**
+   * Calculate the time required for sending the PPDU header, that is the
+   * preamble, SFD and PHR.
+   */
   Time GetPpduHeaderTxTime (void);
-  bool ChannelSupported (uint8_t);
-  Ptr<MobilityModel> m_mobility;
-  Ptr<NetDevice> m_device;
-  Ptr<SpectrumChannel> m_channel;
-  Ptr<AntennaModel> m_antenna;
-  Ptr<SpectrumValue> m_txPsd;
-  Ptr<const SpectrumValue> m_noise;
-  Ptr<LrWpanErrorModel> m_errorModel;
-  LrWpanPhyPibAttributes m_phyPIBAttributes;
 
-  // State variables
-  LrWpanPhyEnumeration m_trxState;  /// transceiver state
-  TracedCallback<Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration> m_trxStateLogger;
-  LrWpanPhyEnumeration m_trxStatePending;  /// pending state change
-  bool PhyIsBusy (void) const;  /// helper function
+  /**
+   * Check if the given channel is supported by the PHY.
+   *
+   * \param channel the channel to check
+   * \return true, if the channel is supported, false otherwise
+   */
+  bool ChannelSupported (uint8_t channel);
+
+  /**
+   * Check if the PHY is busy, which is the case if the PHY is currently sending
+   * or receiving a frame.
+   *
+   * \return true, if the PHY is busy, false otherwise
+   */
+  bool PhyIsBusy (void) const;
 
   // Trace sources
   /**
@@ -467,6 +596,20 @@
    */
   TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
 
+  Ptr<MobilityModel> m_mobility;
+  Ptr<NetDevice> m_device;
+  Ptr<SpectrumChannel> m_channel;
+  Ptr<AntennaModel> m_antenna;
+  Ptr<SpectrumValue> m_txPsd;
+  Ptr<const SpectrumValue> m_noise;
+  Ptr<LrWpanErrorModel> m_errorModel;
+  LrWpanPhyPibAttributes m_phyPIBAttributes;
+
+  // State variables
+  LrWpanPhyEnumeration m_trxState;  /// transceiver state
+  TracedCallback<Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration> m_trxStateLogger;
+  LrWpanPhyEnumeration m_trxStatePending;  /// pending state change
+
   PdDataIndicationCallback m_pdDataIndicationCallback;
   PdDataConfirmCallback m_pdDataConfirmCallback;
   PlmeCcaConfirmCallback m_plmeCcaConfirmCallback;
@@ -487,7 +630,11 @@
   EventId m_edRequest;
   EventId m_setTRXState;
   EventId m_pdDataRequest;
-  UniformVariable m_random;
+
+  /**
+   * Uniform random variable stream.
+   */
+  Ptr<UniformRandomVariable> m_random;
 };
 
 
--- a/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	Fri Apr 25 19:02:57 2014 +0200
@@ -29,9 +29,9 @@
 class PacketBurst;
 
 /**
- * \ingroup lte
+ * \ingroup lr-wpan
  *
- * Signal parameters for LrWpan
+ * Signal parameters for LrWpan.
  */
 struct LrWpanSpectrumSignalParameters : public SpectrumSignalParameters
 {
--- a/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	Fri Apr 25 19:02:57 2014 +0200
@@ -60,6 +60,7 @@
 
 LrWpanSpectrumValueHelper::~LrWpanSpectrumValueHelper (void)
 {
+  NS_LOG_FUNCTION (this);
 }
 
 Ptr<SpectrumValue>
--- a/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	Fri Apr 25 18:58:47 2014 +0200
+++ b/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	Fri Apr 25 19:02:57 2014 +0200
@@ -54,12 +54,15 @@
 
   /**
    * \brief total average power of the signal is the integral of the PSD
-   * \param power spectral density
+   * \param psd spectral density
    * \return total power (using composite trap. rule to numerally integrate
    */
   static double TotalAvgPower (Ptr<const SpectrumValue> psd);
 
 private:
+  /**
+   * A scaling factor for the noise power.
+   */
   double m_noiseFactor;
 
 };