00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef YANS_WIFI_PHY_H
00022 #define YANS_WIFI_PHY_H
00023
00024 #include <stdint.h>
00025 #include "ns3/callback.h"
00026 #include "ns3/event-id.h"
00027 #include "ns3/packet.h"
00028 #include "ns3/object.h"
00029 #include "ns3/traced-callback.h"
00030 #include "ns3/nstime.h"
00031 #include "ns3/ptr.h"
00032 #include "ns3/random-variable.h"
00033 #include "wifi-phy.h"
00034 #include "wifi-mode.h"
00035 #include "wifi-preamble.h"
00036 #include "wifi-phy-standard.h"
00037 #include "interference-helper.h"
00038
00039
00040 namespace ns3 {
00041
00042 class RandomUniform;
00043 class RxEvent;
00044 class YansWifiChannel;
00045 class YansWifiPhyStateHelper;
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 class YansWifiPhy : public WifiPhy
00063 {
00064 public:
00065
00066 static TypeId GetTypeId (void);
00067
00068 YansWifiPhy ();
00069 virtual ~YansWifiPhy ();
00070
00071 void SetChannel (Ptr<YansWifiChannel> channel);
00072 void StartReceivePacket (Ptr<Packet> packet,
00073 double rxPowerDbm,
00074 WifiMode mode,
00075 WifiPreamble preamble);
00076
00077 void SetStandard (enum WifiPhyStandard standard);
00078
00079 void SetRxNoise (double ratio);
00080 double GetRxNoise (void) const;
00081
00082 void SetUseConstantNoiseFloor (bool value);
00083 bool GetUseConstantNoiseFloor () const;
00084
00085 void SetConstantNoiseFloor (double dbm);
00086 double GetConstantNoiseFloor () const;
00087
00088 void SetTxPowerStart (double start);
00089 void SetTxPowerEnd (double end);
00090 void SetNTxPower (uint32_t n);
00091 void SetTxGain (double gain);
00092 void SetRxGain (double gain);
00093 void SetEdThreshold (double threshold);
00094 void SetCcaMode1Threshold (double threshold);
00095 void SetErrorRateModel (Ptr<ErrorRateModel> rate);
00096 void SetDevice (Ptr<Object> device);
00097 void SetMobility (Ptr<Object> mobility);
00098 double GetTxGain (void) const;
00099 double GetRxGain (void) const;
00100 double GetEdThreshold (void) const;
00101 double GetCcaMode1Threshold (void) const;
00102 Ptr<ErrorRateModel> GetErrorRateModel (void) const;
00103 Ptr<Object> GetDevice (void) const;
00104 Ptr<Object> GetMobility (void);
00105
00106
00107 virtual double GetTxPowerStart (void) const;
00108 virtual double GetTxPowerEnd (void) const;
00109 virtual uint32_t GetNTxPower (void) const;
00110 virtual void SetReceiveOkCallback (WifiPhy::RxOkCallback callback);
00111 virtual void SetReceiveErrorCallback (WifiPhy::RxErrorCallback callback);
00112 virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel);
00113 virtual void RegisterListener (WifiPhyListener *listener);
00114 virtual bool IsStateCcaBusy (void);
00115 virtual bool IsStateIdle (void);
00116 virtual bool IsStateBusy (void);
00117 virtual bool IsStateSyncing (void);
00118 virtual bool IsStateRx (void);
00119 virtual bool IsStateTx (void);
00120 virtual Time GetStateDuration (void);
00121 virtual Time GetDelayUntilIdle (void);
00122 virtual Time GetLastRxStartTime (void) const;
00123 virtual Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble) const;
00124 virtual uint32_t GetNModes (void) const;
00125 virtual WifiMode GetMode (uint32_t mode) const;
00126 virtual double CalculateSnr (WifiMode txMode, double ber) const;
00127 virtual Ptr<WifiChannel> GetChannel (void) const;
00128
00129 private:
00130 typedef std::vector<WifiMode> Modes;
00131
00132 private:
00133 YansWifiPhy (const YansWifiPhy &o);
00134 virtual void DoDispose (void);
00135 void Configure80211a (void);
00136 void ConfigureHolland (void);
00137 double GetEdThresholdW (void) const;
00138 double DbmToW (double dbm) const;
00139 double DbToRatio (double db) const;
00140 double WToDbm (double w) const;
00141 double RatioToDb (double ratio) const;
00142 double GetPowerDbm (uint8_t power) const;
00143 void EndReceivePacket (Ptr<Packet> packet, Ptr<InterferenceHelper::Event> event);
00144
00145 private:
00146 double m_edThresholdW;
00147 double m_ccaMode1ThresholdW;
00148 double m_txGainDb;
00149 double m_rxGainDb;
00150 double m_txPowerBaseDbm;
00151 double m_txPowerEndDbm;
00152 uint32_t m_nTxPower;
00153
00154 Ptr<YansWifiChannel> m_channel;
00155 Ptr<Object> m_device;
00156 Ptr<Object> m_mobility;
00157 Modes m_modes;
00158 EventId m_endRxEvent;
00159 UniformVariable m_random;
00160 WifiPhyStandard m_standard;
00161 Ptr<YansWifiPhyStateHelper> m_state;
00162 InterferenceHelper m_interference;
00163 };
00164
00165 }
00166
00167
00168 #endif