12#ifndef WSFRF_JAMMER_HPP
13#define WSFRF_JAMMER_HPP
15#include "wsf_mil_export.h"
94 void TurnOff(
double aSimTime)
override;
99 void TurnOn(
double aSimTime)
override;
182 size_t aTargetIndex)
override;
199 bool StopJamming(
double aSimTime,
double aFrequency,
double aBandwidth,
size_t aBeamNumber,
WsfTrackId aTrackId)
override;
219 size_t aTargetIndex)
override;
309 double aJammingDeltaGain_dB,
331 double aJammingDeltaGain_dB,
398 double aJammerPowers[],
415 double aJammerPowers[],
443 bool aApplyEW_Effects);
597 void Select(
double aSimTime);
617 unsigned int GetAvailableSpotCount()
const;
631 bool GetActiveSpotIndex(
double aFrequency,
662 using BeamMap = std::map<size_t, JammerBeam*>;
700 void Deselect(
double aSimTime)
override;
704 void Select(
double aSimTime)
override;
773 bool AdjustFrequencyBandwidth(
double& aFrequency,
double& aBandwidth);
830 std::recursive_mutex& GetMutex() {
return mMutex; }
848 static void ComputeJammerEffect(
double aSimTime,
849 WsfEM_Xmtr* aXmtrPtr,
850 const WsfEM_Interaction& aTargetInteraction,
851 WsfEM_Interaction& aJammerInteraction,
852 bool aCalculateEW_Effects,
853 bool aIntermediateCalculation,
854 WsfEW_Effect* aProcessingEW_EffectPtr =
nullptr);
858 bool SelectTarget(
double aSimTime, WsfEM_Xmtr* aXmtrPtr);
861 bool ClearTarget(WsfEM_Xmtr* aXmtrPtr);
864 WsfLocalTrack* FindTargetTrack(
const WsfTrackId& aTargetTrackId)
const;
873 static bool UpdateRepeaterResult(
double aSimTime,
874 WsfEM_Xmtr* aXmtrPtr,
875 WsfSensorResult& aResult,
876 WsfEM_Interaction& aJammerInteraction,
877 const WsfEM_Interaction& aTargetInteraction);
884 void InitializeJammerGroup();
889 unsigned int GetActiveGroupCount()
const;
892 using JammerGroup = std::vector<WsfWeapon*>;
895 JammerGroup mJammerGroup;
901 PowerDistribution mGroupPowerDistribution;
906 std::vector<JammerMode*> mJammerModeList;
909 bool mJammerInitialized;
912 TargetingDataMap mTargetDataMap;
914 mutable std::recursive_mutex mMutex;
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_RF_JAMMER
Jammer component.
Definition WsfMilComponentRoles.hpp:38
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
Contains the 'categories' to which an object belongs.
Definition WsfCategoryList.hpp:34
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Interaction.hpp:68
Definition WsfEM_Rcvr.hpp:68
Definition WsfEM_Xmtr.hpp:55
WsfEM_Xmtr(XmtrFunction aFunction, WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_Xmtr.cpp:48
Definition WsfEW_Effect.hpp:45
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
WsfMode()
Definition WsfMode.cpp:15
This class is for the spatial jamming beams that are part of each mode.
Definition WsfRF_Jammer.hpp:553
std::vector< JammerXmtr * > SpotVec
Type defines for managing of jammer spots.
Definition WsfRF_Jammer.hpp:558
unsigned int mBeamNumber
Unique beam number for this mode.
Definition WsfRF_Jammer.hpp:639
PowerDistribution mSpotPowerDistribution
SpotPower distribution - average or constant - defaults to average.
Definition WsfRF_Jammer.hpp:655
SpotVec mAvailableSpotPtrs
Active jammer spot pointer list.
Definition WsfRF_Jammer.hpp:645
unsigned int mMaxNumSpotsPerBeam
Definition WsfRF_Jammer.hpp:652
SpotTrackIdVec mSpotTrackIds
TrackId list for the active jammer spots.
Definition WsfRF_Jammer.hpp:648
unsigned int GetBeamNumber() const
Definition WsfRF_Jammer.hpp:605
void Select(double aSimTime)
Definition WsfRF_Jammer.cpp:3085
std::vector< WsfTrackId > SpotTrackIdVec
Type defines for managing of jammer spot track Ids.
Definition WsfRF_Jammer.hpp:561
SpotVec mActiveSpotPtrs
Active jammer spot pointer list.
Definition WsfRF_Jammer.hpp:642
void SetBeamNumber(unsigned int aBeamNumber)
Definition WsfRF_Jammer.hpp:601
JammerBeam()=delete
Construct a RF jammer beam.
void Deselect(double aSimTime)
Definition WsfRF_Jammer.cpp:3075
Definition WsfRF_Jammer.hpp:659
unsigned int mMaximumNumSpots
Definition WsfRF_Jammer.hpp:810
XmtrVec mActiveXmtrSpotPtrs
Vector for the active jammer transmitters (i.e. spots).
Definition WsfRF_Jammer.hpp:813
JammerBeam * GetJammerBeam(size_t aBeamNumber, bool &aIsActive) const
Definition WsfRF_Jammer.cpp:2843
void AdjustPowerDistribution(PowerDistribution aGroupPowerDistribution, unsigned int aActiveGroupCount)
Definition WsfRF_Jammer.cpp:2796
unsigned int mMaxNumBeams
Definition WsfRF_Jammer.hpp:799
std::vector< JammerXmtr * > XmtrVec
Need to track all of the active transmitters for DIS Emission PDU handling.
Definition WsfRF_Jammer.hpp:666
size_t GetActiveXmtrSpotCount() const
Definition WsfRF_Jammer.hpp:755
void Deselect(double aSimTime) override
Definition WsfRF_Jammer.cpp:2776
PowerDistribution mBeamPowerDistribution
Beam power distribution - average or constant - defaults to average.
Definition WsfRF_Jammer.hpp:802
JammerMode(const WsfScenario &aScenario)
Construct RF Jammer.
Definition WsfRF_Jammer.cpp:2599
bool mBeamAllocationChanged
Flag to indicate if a beam allocation change was made for the last [Start/Stop]Jamming call.
Definition WsfRF_Jammer.hpp:795
JammerBeam * GetNextAssignableBeam(size_t aBeamNumber, bool &aIsActive) const
Definition WsfRF_Jammer.cpp:2912
BeamMap mActiveBeamPtrs
List of all active beams, this mode.
Definition WsfRF_Jammer.hpp:789
JammerMode & operator=(const JammerMode &)=delete
Move operator.
void Select(double aSimTime) override
Definition WsfRF_Jammer.cpp:2787
bool GetActiveBeamSpotIndexes(double aFrequency, double aBandwidth, size_t aBeamNumber, WsfTrackId aTrackId, BeamSpotIndexMap &aBeamSpotIndexMap)
Definition WsfRF_Jammer.cpp:2864
std::map< size_t, JammerBeam * > BeamMap
map<BeamIndex, JammerBeamPointer>
Definition WsfRF_Jammer.hpp:662
std::unique_ptr< WsfEM_Antenna > mAntenna
Master Antenna, this mode.
Definition WsfRF_Jammer.hpp:776
size_t GetAvailableBeamCount() const
Definition WsfRF_Jammer.cpp:2838
WsfRF_Repeater mRepeater
Repeater logic, this mode.
Definition WsfRF_Jammer.hpp:819
bool mUseRepeater
Flag to specify if using a repeater, this mode.
Definition WsfRF_Jammer.hpp:822
std::unique_ptr< JammerXmtr > mXmtr
Master transmitter, this mode.
Definition WsfRF_Jammer.hpp:779
unsigned int GetMaximumXmtrSpotCount() const
Definition WsfRF_Jammer.hpp:759
std::unique_ptr< JammerBeam > mBeam
Master beam, this mode.
Definition WsfRF_Jammer.hpp:782
BeamMap mAvailableBeamPtrs
List of all available beams, this mode.
Definition WsfRF_Jammer.hpp:792
Definition WsfRF_Jammer.hpp:494
double mFrequencyBand[2]
Alternate input for defining the frequency and bandwidth of the jammer transmitter.
Definition WsfRF_Jammer.hpp:544
bool mIgnoreSameSide
'true' if the jammer should not jam platforms on the same side.
Definition WsfRF_Jammer.hpp:541
void GetFrequencyBand(double aFrequencyBand[2]) const
Definition WsfRF_Jammer.cpp:2594
std::vector< WsfStringId > mIgnoredSides
The sides (teams) which this jammer should ignore.
Definition WsfRF_Jammer.hpp:535
bool AllowInteractionWith(WsfEM_Rcvr *aRcvrPtr) override
Definition WsfRF_Jammer.cpp:2570
unsigned int mIgnoredDomains
A bit mask of ignored domains.
Definition WsfRF_Jammer.hpp:538
WsfCategoryList mIgnoredCategories
Categories which this jammer should ignore.
Definition WsfRF_Jammer.hpp:532
JammerXmtr(WsfEM_Antenna *aAntennaPtr)
Definition WsfRF_Jammer.cpp:2483
Definition WsfRF_Jammer.hpp:43
size_t mTargetIndex
'index' to the targeted platform.
Definition WsfRF_Jammer.hpp:46
bool mTargetedLocationValid
'true' if the WCS location is valid.
Definition WsfRF_Jammer.hpp:55
double mTargetedLocationWCS[3]
The targeted location of this jammer transmitter.
Definition WsfRF_Jammer.hpp:52
WsfTrackId mTargetTrackId
Track Id of the targeted platform.
Definition WsfRF_Jammer.hpp:49
Definition WsfRF_Jammer.hpp:37
WsfEM_Xmtr & GetMasterXmtr()
Definition WsfRF_Jammer.cpp:303
~WsfRF_Jammer() override=default
WsfRF_Jammer & operator=(const WsfRF_Jammer &)=delete
static void ComputeTotalJammerEffects(double aSimTime, WsfEM_Interaction &aTargetInteraction, bool aApplyEW_Effects)
Definition WsfRF_Jammer.cpp:2000
double GetMaximumFrequency() const
Definition WsfRF_Jammer.cpp:336
PowerDistribution
GroupPowerDistribution defines the intended power distribution of the transmitters in this group.
Definition WsfRF_Jammer.hpp:62
@ cCONSTANT_POWER
Constant.
Definition WsfRF_Jammer.hpp:64
@ cAVERAGE_POWER
Average.
Definition WsfRF_Jammer.hpp:63
static double ComputeJammerPower(double aSimTime, WsfEM_Xmtr *aJammerXmtrPtr, const WsfEM_Interaction &aTargetInteraction, WsfEM_Interaction &aJammerInteraction, WsfEW_Effect *aProcessingEW_EffectPtr=nullptr)
Definition WsfRF_Jammer.cpp:1529
double GetMinimumFrequency() const
Definition WsfRF_Jammer.cpp:329
const TargetingDataMap & GetTargetDataMap() const
Definition WsfRF_Jammer.hpp:827
std::map< int, TargetingData > TargetingDataMap
Definition WsfRF_Jammer.hpp:58
WsfRF_Jammer(const WsfScenario &aScenario)
Definition WsfRF_Jammer.cpp:43
WsfTrackId GetTargetTrackId(int aId) const
Return trackId at aId location if it exists, otherwise return a nullptr.
Definition WsfRF_Jammer.cpp:1008
std::map< unsigned int, SpotIndexVec > BeamSpotIndexMap
Definition WsfRF_Jammer.hpp:549
std::vector< unsigned int > SpotIndexVec
Definition WsfRF_Jammer.hpp:548
void SetTargetTrackId(int aId, const WsfTrackId &aTargetTrackId)
Insert Target track into TargetDataMap, if it doesn't already exist.
Definition WsfRF_Jammer.cpp:992
WsfEM_Xmtr & GetJammerXmtr(double aSimTime, double aFrequency, double aBandwidth, size_t aBeamNumber, WsfTrackId aTrackId)
Definition WsfRF_Jammer.cpp:310
static double ComputeReceiverGains(WsfEM_Rcvr *aRcvrPtr)
Compute Jammer Receiver Gains from incident Radar Beam.
Definition WsfRF_Jammer.cpp:2393
static void ComputeSingleJammerEffect(double aSimTime, WsfEM_Xmtr *aJammerXmtrPtr, WsfEM_Interaction &aTargetInteraction, WsfEM_Interaction &aJammerInteraction, bool aApplyEW_Effects)
Definition WsfRF_Jammer.cpp:1614
static void ComputeJammerPowers(double aSimTime, WsfEM_Xmtr *aJammerXmtrPtr, const WsfEM_Interaction &aTargetInteraction, WsfEM_Interaction &aJammerInteraction, double aJammerPowers[], WsfEW_Effect *aProcessingEW_EffectPtr=nullptr)
Definition WsfRF_Jammer.cpp:1571
Definition WsfRF_Repeater.hpp:30
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
A 'mode' of the weapon.
Definition WsfWeapon.hpp:78
virtual bool UpdateJamming(double aSimTime, size_t aXmtrIndex, double aFrequency, double aBandwidth, WsfStringId aTechniqueId, WsfTrackId aTrackId, size_t aTargetIndex)
Definition WsfWeapon.hpp:504
virtual size_t GetActiveBeamCount() const
Definition WsfWeapon.hpp:515
virtual size_t GetEM_XmtrCount() const
Definition WsfWeapon.cpp:549
virtual bool SetEA_DeltaGainTechnique(double aSimTime, WsfStringId aTechniqueId, bool aOnOff, WsfStringId aEffectId, double aJammingDeltaGain_dB, WsfStringId aSystemTypeId, WsfStringId aFunctionTypeId)
Definition WsfWeapon.hpp:544
bool ProcessInput(UtInput &aInput) override
Definition WsfWeapon.cpp:276
virtual void SetTargetedLocationWCS(int aId, const double aTargetedLocationWCS[3])
Definition WsfWeapon.hpp:466
virtual size_t GetMaximumBeamCount() const
Definition WsfWeapon.hpp:516
WsfWeapon(const WsfScenario &aScenario)
Definition WsfWeapon.cpp:48
WsfWeapon * Clone() const override=0
bool Initialize(double aSimTime) override
Definition WsfWeapon.cpp:187
virtual bool DeselectEA_Technique(double aSimTime, double aFrequency, double aBandwidth, size_t aBeamNumber, WsfStringId aTechniqueId, WsfTrackId aTrackId)
Definition WsfWeapon.hpp:534
virtual bool WithinFieldOfView(double aSimTime, WsfPlatform *aPlatformPtr)
Definition WsfWeapon.cpp:1225
virtual size_t GetTargetIndex(int aId) const
Definition WsfWeapon.hpp:464
virtual bool StopJamming(double aSimTime, double aFrequency, double aBandwidth, size_t aBeamNumber, WsfTrackId aTrackId)
Definition WsfWeapon.hpp:499
virtual void GetTargetedLocationWCS(int aId, double aTargetedLocationWCS[3]) const
Definition WsfWeapon.hpp:467
virtual bool SelectEA_Technique(double aSimTime, double aFrequency, double aBandwidth, size_t aBeamNumber, WsfStringId aTechniqueId, WsfTrackId aTrackId)
Definition WsfWeapon.hpp:524
virtual unsigned int GetMaximumRequestCount() const
Definition WsfWeapon.hpp:362
virtual double GetQuantityRemaining() const
Definition WsfWeapon.cpp:1014
virtual size_t GetMaximumSpotCount(size_t aBeamNumber) const
Definition WsfWeapon.hpp:518
virtual bool StartJamming(double aSimTime, double aFrequency, double aBandwidth, size_t aBeamNumber, WsfStringId aTechniqueId, WsfTrackId aTrackId, size_t aTargetIndex)
Definition WsfWeapon.hpp:484
void TurnOff(double aSimTime) override
Definition WsfWeapon.cpp:446
virtual bool TargetedLocationValid(int aId) const
Definition WsfWeapon.hpp:469
void TurnOn(double aSimTime) override
Definition WsfWeapon.cpp:465
virtual unsigned int GetActiveRequestCount() const
Return the number of 'FireSalvo' calls that are in process.
Definition WsfWeapon.hpp:358
virtual WsfEM_Xmtr & GetEM_Xmtr(size_t aIndex)
Definition WsfWeapon.cpp:563
virtual bool StartJammingTrack(double aSimTime, WsfStringId aTechniqueId, const WsfTrack *aTrackPtr)
Definition WsfWeapon.hpp:494
virtual size_t GetActiveSpotCount(size_t aBeamNumber) const
Definition WsfWeapon.hpp:517
const int * GetComponentRoles() const override
Definition WsfWeapon.cpp:144
void * QueryInterface(int aRole) override
Definition WsfWeapon.cpp:154
virtual void SetTargetIndex(int aId, size_t aTargetIndex)
Definition WsfWeapon.hpp:463
WSF_EXPORT SensorTrackInitiatedCallback & SensorTrackInitiated(const WsfSimulation *aSimulationPtr)
WSF_EXPORT SensorTrackUpdatedCallback & SensorTrackUpdated(const WsfSimulation *aSimulationPtr)
WSF_EXPORT SensorTrackDroppedCallback & SensorTrackDropped(const WsfSimulation *aSimulationPtr)