15#ifndef WSFDISPLATFORM_HPP
16#define WSFDISPLATFORM_HPP
18#include "wsf_export.h"
28#include "DisEntityState.hpp"
58 virtual void SendingEmission(
double aSimTime, DisEmission* aEmissionPtr, DisEventId& aPreviousNumber) {}
84 std::unique_ptr<DisEntityState> aEntityStatePtr,
85 const DisEntityId& aEntityId,
86 const DisEntityType& aEntityType,
87 bool aIsIncomingTransfer,
88 bool aIsOutgoingTransfer);
99 void CreateEmission(
double aSimTime,
const DisEntityId& aDisEntityId);
112 const DisEntityId&
GetEntityId()
const {
return mEntityStatePtr->GetEntityId(); }
116 const DisEntityType&
GetEntityType()
const {
return mEntityStatePtr->GetEntityType(); }
120 DisUint8
GetForceId()
const {
return mEntityStatePtr->GetForceId(); }
136 int AddArticulation(
int aType,
int aParentType,
unsigned int aPublishBitmap,
WsfArticulatedPart* aPartPtr,
int aStartCount);
138 void ForceUpdate(
double aSimTime);
140 void GetEntityState(
double& aEntityStateUpdateTime, DisEntityState*& aEntityStatePtr);
142 void SetEntityState(
double aSimTime, DisEntityState* aEntityStatePtr);
168 void SendEmissionsPDU(
double aSimTime);
170 DisSystem* GetSensorSystem(
WsfSensor* aSensorPtr);
173 using SB_Key = std::pair<unsigned char, unsigned char>;
187 void Comment(
double aSimTime,
const std::string& aComment);
253 void SetQueryPtr(std::unique_ptr<WsfExchange::Query> aQueryPtr);
260 void TrySendCMEData(
double simTime);
262 void SendOrQueueEmissionsPDU(
double aSimTime);
269 class TrackingRequest
281 SensorData(
WsfSensor* aSensorPtr, DisSystem* aSystemPtr)
282 : mSensorPtr(aSensorPtr)
283 , mSystemPtr(aSystemPtr)
284 , mScanUpdateTime(-1.0)
289 , mDetectBeamPtr(nullptr)
292 , mTrackingRequestList()
293 , mLastBeamCountSent(0)
297 WsfSensor* mSensorPtr;
298 DisSystem* mSystemPtr;
300 double mScanUpdateTime;
303 double mScanFraction;
307 std::vector<DisBeam*> mBeamList;
311 std::vector<WsfStringId> mBeamModeName;
313 DisBeam* mDetectBeamPtr;
316 std::list<DisEntityId> mDetectList;
319 std::list<DisEntityId> mTrackList;
322 std::list<TrackingRequest> mTrackingRequestList;
325 DisUint8 mLastBeamCountSent;
328 class SendInitialCMEDataEvent :
public WsfEvent
331 SendInitialCMEDataEvent(
double aSimTime, WsfDisInterface* aInterfacePtr,
const DisEntityId& aEntityId);
333 EventDisposition Execute()
override;
336 WsfDisInterface* mInterfacePtr;
337 DisEntityId mEntityId;
340 struct SimpleAccelerationData
342 SimpleAccelerationData()
347 UtVec3d mPastVelocity;
348 UtVec3d mPastOrientationWCS;
351 SensorData* GetSensorData(WsfSensor* aSensorPtr);
353 void MarkSensorAsOff(SensorData& aSensorData);
355 void RebuildTrackJamLists(SensorData& aSensorData);
357 unsigned char SetPartIdToBeamIdP(
unsigned int aUniqueId);
359 void SendInitialCMEData(
double aSimTime);
361 void UpdateBeamConfiguration(
double aSimTime, SensorData& aSensorData);
363 void UpdateBeamsWithSweepPosition(
double aSimTime, SensorData& aSensorData);
365 void UpdateBeamsWithTrackingRequests(SensorData& aSensorData);
367 void UpdateSensorUpdateList(
double aSimTime);
369 void UpdateSystemFromSensor(SensorData& aSensorData);
371 bool UpdateTrackingRequestList(
double aSimTime, SensorData& aSensorData, WsfSensorMode* aModePtr,
const WsfTrack* aTrackPtr);
373 void UpdateSimpleAccelerations(
double aSimTime,
374 WsfExtEntityDeadReckon::PlatformDR& aDeadReckonData,
375 bool aDeadReckonChange);
388 double mHeartbeatTimer;
390 double mHeartbeatTimerOverride;
392 DisEmission* mEmissionPtr;
395 std::unique_ptr<DisEntityState> mEntityStatePtr;
398 double mEntityStateUpdateTime;
401 std::unique_ptr<DisEntityState> mPlaybackEntityStatePtr;
404 double mPlaybackEntityStateUpdateTime;
407 WsfDisInterface* mInterfacePtr;
410 double mLastTimeEmissionSent;
416 double mLastTimeEntityStateSent;
419 double mLastTimeMoverUpdated;
422 double mInitialDistributionTime;
425 SimpleAccelerationData* mSimpleAccelerationDataPtr;
428 WsfPlatform* mPlatformPtr;
431 bool mIsIncomingTransfer;
434 bool mIsOutgoingTransfer;
437 bool mHasBeenReplaced;
440 bool mSendEmissionPDU;
443 bool mScheduledInitialCMEData;
446 WsfPlatform* mShadowPlatformPtr;
448 std::vector<WsfDisArticulatedPart*> mArticulatedPartList;
450 using IdMap = std::map<unsigned int, unsigned char>;
451 using IdMapIterator = std::map<unsigned int, unsigned char>::iterator;
452 using IdMapPair = std::pair<unsigned int, unsigned char>;
454 IdMap mPartIdToBeamIdMap;
455 SB_MapType mSysBeamToPartIdMap;
457 std::vector<SensorData> mSensors;
462 bool mSendTransmitterPdus;
464 bool mEntityStateSent;
466 bool mSendEmissionPdu;
469 std::unique_ptr<WsfExchange::Query> mQueryPtr{
nullptr};
471 ComponentList mComponents;
double simTime
Definition WsfScriptTrackClass.cpp:1880
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfArticulatedPart.hpp:36
A component list that stores only components of a specified type.
Definition WsfComponentList.hpp:343
WsfComponentT()
Definition WsfComponent.hpp:124
An internal class for maintaining articulated part information.
Definition WsfDisArticulatedPart.hpp:33
Definition WsfDisInterface.hpp:83
Callback Query class.
Definition WsfExchange.hpp:164
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfSensorMode.hpp:36
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:92
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfComm.hpp:43
Definition WsfCommResult.hpp:34
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32