satellite-interference.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 Magister Solutions Ltd.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Sami Rantanen <sami.rantanen@magister.fi>
19  */
20 
21 #ifndef SATELLITE_INTERFERENCE_H
22 #define SATELLITE_INTERFERENCE_H
23 
24 #include <ns3/mac48-address.h>
25 #include <ns3/nstime.h>
26 #include <ns3/object.h>
27 #include <ns3/simple-ref-count.h>
28 
29 namespace ns3
30 {
31 
36 class SatInterference : public Object
37 {
38  public:
42  class InterferenceChangeEvent : public SimpleRefCount<SatInterference::InterferenceChangeEvent>
43  {
44  public:
52  InterferenceChangeEvent(uint32_t id,
53  Time duration,
54  double rxPower,
55  Address satEarthStationAddress);
56 
61 
65  uint32_t GetId(void) const;
66 
70  Time GetDuration(void) const;
71 
75  Time GetStartTime(void) const;
76 
80  Time GetEndTime(void) const;
81 
85  double GetRxPower(void) const;
86 
90  Address GetSatEarthStationAddress(void) const;
91 
92  private:
94  Time m_endTime;
95  double m_rxPower;
96  uint32_t m_id;
98  };
99 
103  static TypeId GetTypeId(void);
104 
108  TypeId GetInstanceTypeId(void) const;
109 
113  SatInterference();
114 
119 
130  Ptr<SatInterference::InterferenceChangeEvent> Add(Time rxDuration,
131  double rxPower,
132  Address rxAddress);
133 
140  std::vector<std::pair<double, double>> Calculate(
141  Ptr<SatInterference::InterferenceChangeEvent> event);
142 
146  void Reset(void);
147 
152  virtual void NotifyRxStart(Ptr<SatInterference::InterferenceChangeEvent> event);
153 
158  virtual void NotifyRxEnd(Ptr<SatInterference::InterferenceChangeEvent> event);
159 
165  virtual bool HasCollision(Ptr<SatInterference::InterferenceChangeEvent> event);
166 
167  private:
179  virtual Ptr<SatInterference::InterferenceChangeEvent> DoAdd(Time rxDuration,
180  double rxPower,
181  Address rxAddress) = 0;
182 
192  virtual std::vector<std::pair<double, double>> DoCalculate(
193  Ptr<SatInterference::InterferenceChangeEvent> event) = 0;
194 
200  virtual void DoReset(void) = 0;
201 
209  virtual void DoNotifyRxStart(Ptr<SatInterference::InterferenceChangeEvent> event) = 0;
210 
218  virtual void DoNotifyRxEnd(Ptr<SatInterference::InterferenceChangeEvent> event) = 0;
219 
222 
226  std::map<Ptr<SatInterference::InterferenceChangeEvent>, bool> m_packetCollisions;
227 
232 };
233 
234 } // namespace ns3
235 
236 #endif /* SATELLITE_INTERFERENCE_H */
Event for identifying interference change events (receiving)
~InterferenceChangeEvent()
Destructor of Event for satellite interference.
InterferenceChangeEvent(uint32_t id, Time duration, double rxPower, Address satEarthStationAddress)
Constructor of Event for satellite interference.
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.
SatInterference(const SatInterference &o)
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.
SatInterference & operator=(const SatInterference &o)
~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.