24 #include <ns3/simulator.h>
26 NS_LOG_COMPONENT_DEFINE(
"SatInterference");
34 Address satEarthStationAddress)
35 : m_startTime(Simulator::Now()),
36 m_endTime(m_startTime + rxDuration),
39 m_satEarthStationAddress(satEarthStationAddress)
50 NS_LOG_FUNCTION(
this);
58 NS_LOG_FUNCTION(
this);
60 return m_endTime - m_startTime;
66 NS_LOG_FUNCTION(
this);
74 NS_LOG_FUNCTION(
this);
82 NS_LOG_FUNCTION(
this);
90 NS_LOG_FUNCTION(
this);
92 return m_satEarthStationAddress;
104 static TypeId tid = TypeId(
"ns3::SatInterference").SetParent<Object>();
124 Ptr<SatInterference::InterferenceChangeEvent>
127 NS_LOG_FUNCTION(
this << duration.GetSeconds() << power << rxAddress);
129 return DoAdd(duration, power, rxAddress);
132 std::vector<std::pair<double, double>>
135 NS_LOG_FUNCTION(
this);
139 std::map<Ptr<SatInterference::InterferenceChangeEvent>,
bool>::iterator iter;
140 bool wasCollisionReported =
true;
146 wasCollisionReported =
false;
150 if (!wasCollisionReported)
152 NS_LOG_INFO(
"Packet collision!");
162 NS_LOG_FUNCTION(
this);
173 NS_LOG_FUNCTION(
this);
177 std::pair<std::map<Ptr<SatInterference::InterferenceChangeEvent>,
bool>::iterator,
bool> result;
182 NS_FATAL_ERROR(
"SatInterference::NotifyRxStart - Event already exists");
191 NS_LOG_FUNCTION(
this);
206 NS_LOG_FUNCTION(
this);
208 std::map<Ptr<SatInterference::InterferenceChangeEvent>,
bool>::iterator result =
213 NS_FATAL_ERROR(
"SatInterference::HasCollision - Event not found");
216 return result->second;
Time GetEndTime(void) const
~InterferenceChangeEvent()
Destructor of Event for satellite interference.
Time GetDuration(void) const
double GetRxPower(void) const
Address GetSatEarthStationAddress(void) const
InterferenceChangeEvent(uint32_t id, Time duration, double rxPower, Address satEarthStationAddress)
Constructor of Event for satellite interference.
uint32_t GetId(void) const
Time GetStartTime(void) const
Abstract class defining interface for interference calculations objects.
TypeId GetInstanceTypeId(void) const
Derived from Object.
virtual void DoNotifyRxStart(Ptr< SatInterference::InterferenceChangeEvent > event)=0
Notifies that RX is started by a receiver.
void Reset(void)
Resets current interference.
virtual std::vector< std::pair< double, double > > DoCalculate(Ptr< SatInterference::InterferenceChangeEvent > event)=0
Calculates interference power for the given reference Sets final power at end time to finalPower.
Ptr< SatInterference::InterferenceChangeEvent > Add(Time rxDuration, double rxPower, Address rxAddress)
Adds interference power to interference object.
uint32_t m_currentlyReceiving
~SatInterference()
Destructor for Satellite interference base class.
virtual Ptr< SatInterference::InterferenceChangeEvent > DoAdd(Time rxDuration, double rxPower, Address rxAddress)=0
Adds interference power to interference object.
static TypeId GetTypeId(void)
Derived from Object.
virtual void DoNotifyRxEnd(Ptr< SatInterference::InterferenceChangeEvent > event)=0
Notifies that RX is ended by a receiver.
virtual void NotifyRxEnd(Ptr< SatInterference::InterferenceChangeEvent > event)
Notifies that RX is ended by a receiver.
virtual void DoReset(void)=0
Resets current interference.
virtual void NotifyRxStart(Ptr< SatInterference::InterferenceChangeEvent > event)
Notifies that RX is started by a receiver.
virtual bool HasCollision(Ptr< SatInterference::InterferenceChangeEvent > event)
Checks whether the packet has collided.
std::vector< std::pair< double, double > > Calculate(Ptr< SatInterference::InterferenceChangeEvent > event)
Calculates interference power for the given reference.
SatInterference()
Constructor for Satellite interference base class.
std::map< Ptr< SatInterference::InterferenceChangeEvent >, bool > m_packetCollisions
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.