WSF
WsfUplinkProcessor.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// Updated by Infoscitex, a DCS Company
13// ****************************************************************************
14
15#ifndef WSFUPLINKPROCESSOR_HPP
16#define WSFUPLINKPROCESSOR_HPP
17
18#include <list>
19
20#include "UtCallbackHolder.hpp"
21class WsfLocalTrack;
22#include "wsf_mil_export.h"
23class WsfPlatform;
26class WsfTrack;
27#include "WsfTrackId.hpp"
29
30class WSF_MIL_EXPORT WsfUplinkProcessor : public WsfScriptProcessor
31{
32public:
34 static bool HasUplinkProcessor(WsfPlatform& aPlatform);
35
36 WsfUplinkProcessor(const WsfScenario& aScenario);
37 ~WsfUplinkProcessor() override = default;
38 WsfUplinkProcessor* Clone() const override { return new WsfUplinkProcessor(*this); }
39
40 bool ProcessInput(UtInput& aInput) override;
41
42 bool Initialize(double aSimTime) override; // setup callbacks
43
44 bool UplinkCapable();
45 void AddUplinkPath(const std::string& aSensorName, const std::string& aCommName);
46
47 void LinkToSensorsOnInit(bool val) { mLinkToSensorsOnInit = val; }
48
49 void SetSendInterval(double aInterval) { mUplinkSendInterval = aInterval; }
50
51 bool StartUplinking(size_t aReceiverIndex, size_t aTargetIndex = 0);
52
53 bool StartUplinking(WsfPlatform* aReceiverPtr, WsfTrack* aTargetPtr);
54
55 bool StopUplinking(size_t aReceiverIndex);
56
57 bool StopUplinking(WsfPlatform* aReceiverPtr);
58
59 bool IsUplinkingTo(WsfPlatform* aReceiverPtr);
60
61 unsigned int WeaponUplinkCount();
62
63 WsfPlatform* UplinkWeaponPlatform(unsigned int aIndex);
64
65 bool ProcessMessage(double aSimTime, const WsfMessage& aMessage) override;
66
67 wsf::comm::Comm* GetUplinkCommForTrack(WsfStringId aSensorName);
68
69 // similar to WsfComm* SelectDevice() except it does not check if either comm is turned on
70 wsf::comm::Comm* GetUplinkCommToRecipient(WsfPlatform* aSourcePtr, WsfPlatform* aTargetPtr);
71
72 bool VerifyUplinks();
73
74 bool IsUplinkPathListEmpty() { return mUplinkPathList.empty(); }
75
76 void AddTrackUplink(WsfTrackId aSensorTrackId, WsfPlatform* aPlatformPtr, wsf::comm::Comm* aCommPtr, size_t aTargetIndex);
77
78 void ClearTrackUplinkList() { mTrackUplinkList.clear(); }
79
80 void AddUplink(WsfTrackId aTaskTrackId,
81 WsfTrackId aLocalTrackId,
82 WsfTrackId aSensorTrackId,
83 WsfPlatform* aUplinkDestinationPtr,
84 wsf::comm::Comm* aCommPtr,
85 WsfStringId aTrackSource,
86 unsigned int aTaskId,
87 double aLastSendTime);
88
89 void RemoveUplink(unsigned int aTaskId);
90
91 void UplinkTrack(double aSimTime, const WsfTrack* aTrackPtr, double aUplinkSendInterval, bool aIsLocalTrack);
92
93 virtual void LocalTrackInitiated(double aSimTime, const WsfLocalTrack* aLocalTrackPtr, const WsfTrack* aRawTrackPtr);
94
95 virtual void LocalTrackUpdated(double aSimTime, const WsfLocalTrack* aLocalTrackPtr, const WsfTrack* aRawTrackPtr);
96
97 virtual void RawTrackReceived(double aSimTime, const WsfTrack* aRawTrackPtr);
98
99 virtual void LocalTrackCorrelation(double aSimTime, const WsfLocalTrack* aLocalTrackPtr, const WsfTrackId& aRawTrackId);
100
101 virtual void WeaponTerminated(double aSimTime, const WsfWeaponEngagement* aEngagementPtr);
102
103 void SetMaxUplinkCount(unsigned int aNumUplinks) { mMaxSupportedUplinks = aNumUplinks; }
104 unsigned int GetMaxSupportedUplinks() { return mMaxSupportedUplinks; }
105
106 // Scripting support
107 UtScriptClass* CreateScriptClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
108
109 const char* GetScriptClassName() const override { return "WsfUplinkProcessor"; }
110
111protected:
114
115private:
116 unsigned int mMaxSupportedUplinks;
118 struct UplinkPath
119 {
121 WsfStringId mSensorName;
122
124 WsfStringId mCommName;
125 };
126 using UplinkPathList = std::list<UplinkPath>;
127 using UplinkPathListIter = std::list<UplinkPath>::iterator;
128 UplinkPathList mUplinkPathList;
129
133
134 struct TrackUplink
135 {
137 WsfTrackId mSensorTrackId;
138
140 WsfStringId mSensorName;
141
143 size_t mTargetIndex;
144
146 WsfPlatform* mPlatformPtr;
147
149 wsf::comm::Comm* mCommPtr;
150 };
151 using TrackUplinkList = std::list<TrackUplink>;
152 TrackUplinkList mTrackUplinkList;
153
155 struct Uplink
156 {
158 WsfTrackId mTaskTrackId;
159
161 WsfTrackId mLocalTrackId;
162
164 WsfTrackId mSensorTrackId;
165
167 WsfPlatform* mUplinkDestinationPtr;
168
170 wsf::comm::Comm* mCommPtr;
171
173 WsfStringId mTrackSource;
174
176 unsigned int mTaskId;
177
179 double mLastSendTime;
180 };
181
182 using UplinkList = std::vector<Uplink>;
183 UplinkList mUplinkList;
184
191 struct ActiveWeapon
192 {
194 WsfTrackId mTaskTrackId;
196 WsfStringId mWeaponSystemName;
198 size_t mPlatformIndex;
200 unsigned int mSerialNumber;
202 size_t mTargetIndex;
203 };
204
205 using ActiveWeaponList = std::list<ActiveWeapon>;
206 using ActiveWeaponListIter = std::list<ActiveWeapon>::iterator;
207
208 ActiveWeaponList mActiveWeaponList;
209
210 bool mLinkToSensorsOnInit;
211 double mUplinkSendInterval;
212 UtCallbackHolder mCallbacks;
213};
214
215
217{
218public:
219 WsfScriptUplinkProcessor(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
220
221 void* Create(const UtScriptContext& aContext) override;
222 void* Clone(void* aObjectPtr) override;
223 void Destroy(void* aObjectPtr) override;
224 UtScriptContext* GetContext(void* aObjectPtr) override;
225
226 UT_DECLARE_SCRIPT_METHOD(StartUplinking_1);
227 UT_DECLARE_SCRIPT_METHOD(StartUplinking_2);
232 UT_DECLARE_SCRIPT_METHOD(UplinkPlatformEntry);
233 UT_DECLARE_SCRIPT_METHOD(MaxSupportedUplinks);
234};
235
236#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
Definition WsfLocalTrack.hpp:32
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
WsfScriptProcessorClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfScriptProcessorClass.cpp:31
WsfProcessor * Clone() const override
Definition WsfScriptProcessor.cpp:97
WsfScriptProcessor(const WsfScenario &aScenario)
Definition WsfScriptProcessor.cpp:30
bool Initialize(double aSimTime) override
Definition WsfScriptProcessor.cpp:104
bool ProcessInput(UtInput &aInput) override
Definition WsfScriptProcessor.cpp:186
bool ProcessMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfScriptProcessor.cpp:300
UT_DECLARE_SCRIPT_METHOD(StartUplinking_1)
UT_DECLARE_SCRIPT_METHOD(IsUplinkingTo)
UT_DECLARE_SCRIPT_METHOD(UplinkCount)
UT_DECLARE_SCRIPT_METHOD(StartUplinking_2)
UT_DECLARE_SCRIPT_METHOD(UplinkPlatformEntry)
void Destroy(void *aObjectPtr) override
Definition WsfUplinkProcessor.cpp:773
UT_DECLARE_SCRIPT_METHOD(UplinkCapable)
UT_DECLARE_SCRIPT_METHOD(MaxSupportedUplinks)
UtScriptContext * GetContext(void *aObjectPtr) override
Definition WsfUplinkProcessor.cpp:779
void * Create(const UtScriptContext &aContext) override
Definition WsfUplinkProcessor.cpp:759
UT_DECLARE_SCRIPT_METHOD(StopUplinking)
WsfScriptUplinkProcessor(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfUplinkProcessor.cpp:741
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfUplinkProcessor.hpp:31
WsfUplinkProcessor * Clone() const override
Definition WsfUplinkProcessor.hpp:38
unsigned int GetMaxSupportedUplinks()
Definition WsfUplinkProcessor.hpp:104
WsfUplinkProcessor(const WsfScenario &aScenario)
Definition WsfUplinkProcessor.cpp:30
WsfUplinkProcessor & operator=(const WsfUplinkProcessor &)=delete
static WsfUplinkProcessor * GetUplinkProcessor(WsfPlatform &aPlatform)
Definition WsfUplinkProcessor.cpp:667
void LinkToSensorsOnInit(bool val)
Definition WsfUplinkProcessor.hpp:47
void SetMaxUplinkCount(unsigned int aNumUplinks)
Definition WsfUplinkProcessor.hpp:103
bool IsUplinkPathListEmpty()
Definition WsfUplinkProcessor.hpp:74
~WsfUplinkProcessor() override=default
const char * GetScriptClassName() const override
Definition WsfUplinkProcessor.hpp:109
static bool HasUplinkProcessor(WsfPlatform &aPlatform)
Definition WsfUplinkProcessor.cpp:702
void ClearTrackUplinkList()
Definition WsfUplinkProcessor.hpp:78
void SetSendInterval(double aInterval)
Definition WsfUplinkProcessor.hpp:49
Definition WsfWeaponEngagement.hpp:43
Definition WsfComm.hpp:43
Copyrights Multiple, All Rights Reserved