00001
00002 #ifndef WIRELESS_COMM_SIGNAL_H
00003 #define WIRELESS_COMM_SIGNAL_H
00004
00005 #include <boost/shared_ptr.hpp>
00006
00007 #include "signal.hpp"
00008 #include "packet.hpp"
00009
00010 class SimTime;
00011
00015 class WirelessCommSignal : public Signal {
00016 friend ostream& operator<< (ostream& s, const WirelessCommSignal& rhs);
00017 public:
00019 typedef boost::shared_ptr<WirelessCommSignal> WirelessCommSignalPtr;
00020
00025 static inline WirelessCommSignalPtr create(
00026 const Location& location, double dbStrength,
00027 double wavelength, double transmitterGain,
00028 PacketPtr packet);
00029
00034 static inline WirelessCommSignalPtr create(
00035 const WirelessCommSignal& rhs);
00036
00041 inline PacketPtr getPacketPtr() const;
00042
00047 inline double getWavelength() const;
00048
00053 inline double getTransmitterGain() const;
00054
00059 SimTime getDuration() const;
00060
00065 inline void setChannelId(t_uint channelId);
00066
00071 inline t_uint getChannelId() const;
00072
00073 protected:
00074
00076 WirelessCommSignal(const Location& location, double dbStrength,
00077 double wavelength, double transmitterGain,
00078 PacketPtr packet);
00079
00081 WirelessCommSignal(const WirelessCommSignal& rhs);
00082
00083 virtual SignalPtr clone() const;
00084
00085 private:
00086
00088 static const t_uint m_DEFAULT_CHANNEL_ID = 0;
00089
00092 PacketPtr m_packetPtr;
00093
00096 double m_wavelength;
00097
00100 double m_transmitterGain;
00101
00104 t_uint m_channelId;
00105
00107 WirelessCommSignal& operator= (const WirelessCommSignal& rhs);
00108
00109 };
00110 typedef boost::shared_ptr<WirelessCommSignal> WirelessCommSignalPtr;
00111 typedef boost::shared_ptr<WirelessCommSignal const>
00112 ConstWirelessCommSignalPtr;
00113
00115
00117
00118 inline WirelessCommSignalPtr WirelessCommSignal::create(
00119 const Location& location, double dbStrength,
00120 double wavelength, double transmitterGain,
00121 PacketPtr packet)
00122 {
00123 WirelessCommSignalPtr p(new WirelessCommSignal(location,
00124 dbStrength, wavelength, transmitterGain, packet));
00125 return p;
00126 }
00127
00128 inline WirelessCommSignalPtr WirelessCommSignal::create(
00129 const WirelessCommSignal& rhs)
00130 {
00131 WirelessCommSignalPtr p =
00132 boost::dynamic_pointer_cast<WirelessCommSignal>(rhs.clone());
00133
00134 assert(p.get() != 0);
00135 return p;
00136 }
00137
00138 inline PacketPtr WirelessCommSignal::getPacketPtr() const
00139 {
00140 return m_packetPtr;
00141 }
00142
00143 inline double WirelessCommSignal::getWavelength() const
00144 {
00145 return m_wavelength;
00146 }
00147
00148 inline double WirelessCommSignal::getTransmitterGain() const
00149 {
00150 return m_transmitterGain;
00151 }
00152
00153 inline void WirelessCommSignal::setChannelId(t_uint channelId)
00154 {
00155 m_channelId = channelId;
00156 }
00157
00158 inline t_uint WirelessCommSignal::getChannelId() const
00159 {
00160 return m_channelId;
00161 }
00162
00164
00166
00167 inline ostream& operator<< (ostream& s, const WirelessCommSignal& rhs)
00168 {
00169 return s << "Wireless signal state (" <<
00170 static_cast<Signal>(rhs) << "), packet=(" <<
00171 *(rhs.m_packetPtr) << ")";
00172 }
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189 #endif // WIRELESS_COMM_SIGNAL_H
00190