00001 00002 #ifndef WIRELESS_CHANNEL_H 00003 #define WIRELESS_CHANNEL_H 00004 00005 #include <boost/shared_ptr.hpp> 00006 00007 #include "channel.hpp" 00008 00009 class PathLoss; 00010 typedef boost::shared_ptr<PathLoss> PathLossPtr; 00011 class Fading; 00012 typedef boost::shared_ptr<Fading> FadingPtr; 00013 class WirelessCommSignal; 00014 typedef boost::shared_ptr<WirelessCommSignal> WirelessCommSignalPtr; 00015 00020 class WirelessChannel : public Channel { 00021 public: 00023 typedef boost::shared_ptr<WirelessChannel> WirelessChannelPtr; 00024 00031 static inline WirelessChannelPtr create(PathLossPtr pathLossModel); 00032 00040 static inline WirelessChannelPtr create(PathLossPtr pathLossModel, 00041 FadingPtr fadingModel); 00042 00051 virtual double getRecvdStrength(const WirelessCommSignal& signal, 00052 const PhysicalLayer& receiver) const; 00053 00066 virtual bool signalHasError(double signalSinr, 00067 const WirelessCommSignal& signal) const; 00068 00069 protected: 00070 00076 WirelessChannel(PathLossPtr pathLossModel); 00077 00084 WirelessChannel(PathLossPtr pathLossModel, FadingPtr fadingModel); 00085 00086 private: 00087 00089 static const bool m_DEBUG_SIGNAL_STRENGTH = false; 00090 00091 PathLossPtr m_pathLossModel; 00092 FadingPtr m_fadingModel; 00093 00094 }; 00095 typedef boost::shared_ptr<WirelessChannel> WirelessChannelPtr; 00096 00098 // Inline Functions 00100 00101 inline WirelessChannelPtr WirelessChannel::create( 00102 PathLossPtr pathLossModel) 00103 { 00104 WirelessChannelPtr p(new WirelessChannel(pathLossModel)); 00105 return p; 00106 } 00107 00108 inline WirelessChannelPtr WirelessChannel::create( 00109 PathLossPtr pathLossModel, FadingPtr fadingModel) 00110 { 00111 WirelessChannelPtr p(new WirelessChannel(pathLossModel, fadingModel)); 00112 return p; 00113 } 00114 00116 // Overloaded Operators 00118 00119 #endif // WIRELESS_CHANNEL_H 00120