WSF
WsfEM_Xmtr.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFEM_XMTR_HPP
13#define WSFEM_XMTR_HPP
14
15#include "wsf_export.h"
16
17#include <map>
18#include <vector>
19
21#include "WsfComponent.hpp"
22#include "WsfComponentList.hpp"
23class WsfEM_Antenna;
25class WsfEM_Rcvr;
26#include "WsfEM_Types.hpp"
27class WsfEM_Xmtr;
28#include "WsfEM_XmtrRcvr.hpp"
29class WsfPlatform;
30#include "WsfStringId.hpp"
31
37
55{
56public:
58
59
63
65 using PowerList = std::vector<std::pair<double, double>>;
66
75
76 WsfEM_Xmtr(XmtrFunction aFunction, WsfEM_Antenna* aAntennaPtr = nullptr);
77 WsfEM_Xmtr(const WsfEM_Xmtr& aSrc, WsfEM_Antenna* aAntennaPtr = nullptr);
78 ~WsfEM_Xmtr() override;
79 WsfEM_Xmtr& operator=(const WsfEM_Xmtr&) = delete;
80
82 std::string GetName() const { return "transmitter"; }
83
86 ComponentList& GetComponents() { return mComponents; }
87 const ComponentList& GetComponents() const { return mComponents; }
89
90 const char* GetScriptClassName() const override { return "WsfEM_Xmtr"; }
91
92 void Activate();
93 void Deactivate();
94
95 virtual bool AllowInteractionWith(WsfEM_Rcvr* aRcvrPtr);
96
97 virtual double ComputeRadiatedPower(double aTargetAz,
98 double aTargetEl,
99 double aEBS_Az,
100 double aEBS_El,
101 double aFrequency,
102 double& aAntennaGain);
103
104 bool Initialize(WsfSimulation& aSimulation) override;
105
106 bool ProcessInput(UtInput& aInput) override;
107
108 virtual bool ProcessInputBlock(UtInput& aInput);
109
110 bool AllowZeroFrequencyInput() const { return mAllowZeroFrequencyInput; }
111 void AllowZeroFrequencyInput(bool val) { mAllowZeroFrequencyInput = val; }
112
115 WsfEM_Rcvr* GetLinkedReceiver() const { return mLinkedRcvrPtr; }
116
119 int GetAlternateFrequencyCount() const { return static_cast<int>(mAlternateFrequencyList.size()); }
120
122 using FrequencyList = std::map<size_t, double>;
123 const FrequencyList& GetAlternateFrequencies() { return mAlternateFrequencyList; }
124
125 int GetCurrentAlternateFrequencyId() const { return mCurrentAltFreqId; }
126
127 double GetAlternateFrequency(unsigned int aId) const;
128
129 bool ExplicitFrequencyList() const { return mExplicitFrequencyList; }
130
133 XmtrFunction GetFunction() const { return mFunction; }
134
139
140 double GetPeakPower(double aFrequency = 0.0) const;
141 double GetAveragePower(double aFrequency = 0.0) const;
142 double GetPower(double aFrequency = 0.0) const;
144
147 double GetPulseCompressionRatio() const { return mPulseCompressionRatio; }
148
151 int GetPulseRepetitionFrequencyCount() const { return static_cast<int>(mPulseRepetitionFrequencies.size() - 1); }
152
155 double GetPulseRepetitionFrequency(size_t aIndex = 0) const;
156
159 std::vector<double> GetPulseRepetitionFrequencies() const;
160
163 int GetPulseRepetitionIntervalCount() const { return static_cast<int>(mPulseRepetitionIntervals.size() - 1); }
164
167 double GetPulseRepetitionInterval(size_t aIndex = 0) const;
168
171 std::vector<double> GetPulseRepetitionIntervals() const;
172
175 double GetPulseWidth() const { return mPulseWidth; }
176
179 double GetDutyCycle() const { return mDutyCycle; }
180
185 bool IsUsingPeakPower() const { return mUsePeakPower; }
186
187 void SetLinkedReceiver(WsfEM_Rcvr* aRcvrPtr);
188
189 void SetBandwidth(double aBandwidth) override;
190
191 void SetFrequency(double aFrequency) override;
192
193 void SelectAlternateFrequency(unsigned int aId);
194
195 bool UseDefaultFrequency() { return mUseDefaultFrequency; }
196 void UseDefaultFrequency(bool aUseDefaultFrequency) { mUseDefaultFrequency = aUseDefaultFrequency; }
197
198 void SetPolarization(WsfEM_Types::Polarization aPolarization) override;
199
200 void SetPower(double aPower);
201 bool SetPower(double aPower, double aFrequency);
202
203 void SetPulseCompressionRatio(double aPulseCompressionRatio);
204
205 void SetPulseRepetitionFrequency(double aPulseRepetitionFrequency, size_t aPRF_Num = 1);
206
207 void SetPulseRepetitionInterval(double aPulseRepetitionInterval, size_t aPRF_Num = 1);
208
209 void SetPulseWidth(double aPulseWidth);
210
211 void SetDutyCycle(double aDutyCycle);
212
214
215 virtual bool AddListener(WsfEM_Rcvr* aRcvrPtr);
216
217 virtual bool RemoveListener(WsfEM_Rcvr* aRcvrPtr);
218
219 virtual void NotifyListeners(double aSimTime, WsfEM_Interaction& aResult);
220
222 virtual bool HasListeners() const { return (!mListeners.empty()); }
223
224 virtual bool AddChangeListener(WsfEM_Rcvr* aRcvrPtr);
225
226 virtual bool RemoveChangeListener(WsfEM_Rcvr* aRcvrPtr);
227
228 virtual void NotifyChangeListeners(double aSimTime, size_t aTargetIndex);
229
231 virtual bool HasChangeListeners() const { return (!mListeners.empty()); }
233
237
238
241 double GetTransmissionEndTime() const { return mTransmissionEndTime; }
242
244 void SetTransmissionEndTime(double aTransmissionEndTime) { mTransmissionEndTime = aTransmissionEndTime; }
245
247
248private:
250 ComponentList mComponents;
251
253 WsfEM_Manager* mEM_ManagerPtr;
254
256 WsfEM_Rcvr* mLinkedRcvrPtr;
257
259 FrequencyList mAlternateFrequencyList;
260
261 PowerList mPowerList;
262 double mPulseCompressionRatio;
263 std::vector<double> mPulseRepetitionFrequencies;
264 std::vector<double> mPulseRepetitionIntervals;
265 double mPulseWidth;
266 double mDutyCycle;
267
270 double mTransmissionEndTime;
271
272 using Listeners = std::vector<WsfEM_Rcvr*>;
274 Listeners mListeners;
276 Listeners mChangeListeners;
277
278 XmtrFunction mFunction;
279
281 unsigned int mCurrentAltFreqId;
282
285 bool mExplicitFrequencyList;
286
288 // in the frequency list and ignore the alternate list.
289 bool mUseDefaultFrequency;
290
291 bool mAllowZeroFrequencyInput;
292
295 bool mUsePeakPower;
296};
297
298#endif
WsfComponentT< WsfEM_Xmtr > WsfEM_XmtrComponent
Definition WsfEM_Xmtr.hpp:36
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfAntennaPattern.hpp:35
A component list that stores only components of a specified type.
Definition WsfComponentList.hpp:343
Definition WsfComponent.hpp:119
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Interaction.hpp:68
Definition WsfEM_Manager.hpp:44
Definition WsfEM_Rcvr.hpp:68
virtual void SetPolarization(WsfEM_Types::Polarization aPolarization)
Definition WsfEM_XmtrRcvr.cpp:807
WsfEM_XmtrRcvr(WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_XmtrRcvr.cpp:40
virtual bool ProcessInput(UtInput &aInput)
Definition WsfEM_XmtrRcvr.cpp:279
virtual void SetBandwidth(double aBandwidth)
Definition WsfEM_XmtrRcvr.cpp:819
virtual void SetFrequency(double aFrequency)
Definition WsfEM_XmtrRcvr.cpp:813
virtual bool Initialize(WsfSimulation &aSimulation)
Definition WsfEM_XmtrRcvr.cpp:144
Definition WsfEM_Xmtr.hpp:55
WsfComponentListT< WsfEM_XmtrComponent > ComponentList
Definition WsfEM_Xmtr.hpp:61
bool UseDefaultFrequency()
Definition WsfEM_Xmtr.hpp:195
int GetPulseRepetitionFrequencyCount() const
Definition WsfEM_Xmtr.hpp:151
double GetPulseWidth() const
Definition WsfEM_Xmtr.hpp:175
void SetTransmissionEndTime(double aTransmissionEndTime)
Set the simulation time when the current transmission is to be completed.
Definition WsfEM_Xmtr.hpp:244
double GetTransmissionEndTime() const
Definition WsfEM_Xmtr.hpp:241
double GetPulseCompressionRatio() const
Definition WsfEM_Xmtr.hpp:147
XmtrFunction GetFunction() const
Definition WsfEM_Xmtr.hpp:133
std::string GetName() const
Required to display error messages in WsfComponentFactoryList.
Definition WsfEM_Xmtr.hpp:82
void UseDefaultFrequency(bool aUseDefaultFrequency)
Definition WsfEM_Xmtr.hpp:196
XmtrFunction
XmtrFunction defines the intended purpose of the transmitter.
Definition WsfEM_Xmtr.hpp:69
@ cXF_COMM
Communications.
Definition WsfEM_Xmtr.hpp:71
@ cXF_UNDEFINED
Undefined.
Definition WsfEM_Xmtr.hpp:70
@ cXF_INTERFERER
Interfering system.
Definition WsfEM_Xmtr.hpp:73
@ cXF_SENSOR
Sensing.
Definition WsfEM_Xmtr.hpp:72
void AllowZeroFrequencyInput(bool val)
Definition WsfEM_Xmtr.hpp:111
int GetCurrentAlternateFrequencyId() const
Definition WsfEM_Xmtr.hpp:125
WsfEM_Xmtr & operator=(const WsfEM_Xmtr &)=delete
std::map< size_t, double > FrequencyList
Get the frequencies container. This is for External Services.
Definition WsfEM_Xmtr.hpp:122
virtual bool HasChangeListeners() const
Return true if any passive listeners have been attached.
Definition WsfEM_Xmtr.hpp:231
bool AllowZeroFrequencyInput() const
Definition WsfEM_Xmtr.hpp:110
const ComponentList & GetComponents() const
Definition WsfEM_Xmtr.hpp:87
int GetAlternateFrequencyCount() const
Definition WsfEM_Xmtr.hpp:119
WsfEM_Rcvr * GetLinkedReceiver() const
Definition WsfEM_Xmtr.hpp:115
ComponentList & GetComponents()
Definition WsfEM_Xmtr.hpp:86
int GetPulseRepetitionIntervalCount() const
Definition WsfEM_Xmtr.hpp:163
std::vector< std::pair< double, double > > PowerList
Type definition for the frequency dependent power.
Definition WsfEM_Xmtr.hpp:65
WsfEM_XmtrComponent Component
Even though this isn't a component, it must have a role in order to use component factories.
Definition WsfEM_Xmtr.hpp:60
const char * GetScriptClassName() const override
Definition WsfEM_Xmtr.hpp:90
bool IsUsingPeakPower() const
Definition WsfEM_Xmtr.hpp:185
double GetDutyCycle() const
Definition WsfEM_Xmtr.hpp:179
WsfEM_Xmtr(XmtrFunction aFunction, WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_Xmtr.cpp:48
bool ExplicitFrequencyList() const
Definition WsfEM_Xmtr.hpp:129
const FrequencyList & GetAlternateFrequencies()
Definition WsfEM_Xmtr.hpp:123
virtual bool HasListeners() const
Return true if any passive listeners have been attached.
Definition WsfEM_Xmtr.hpp:222
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Polarization
Polarization of the electromagnetic wave.
Definition WsfEM_Types.hpp:21
Copyrights Multiple, All Rights Reserved