WSF
wsf::comm::Comm Class Reference

#include <WsfComm.hpp>

Inheritance diagram for wsf::comm::Comm:
Collaboration diagram for wsf::comm::Comm:

Classes

struct  Gateway

Public Types

enum  CommType { cCT_XMT_ONLY = 0x0001 , cCT_RCV_ONLY = 0x0002 , cCT_XMT_RCV = cCT_XMT_ONLY | cCT_RCV_ONLY }
enum class  MulticastConformanceLevel : size_t { cLEVEL_0 , cLEVEL_1 , cLEVEL_2 }
using LinkAddress = std::vector<wsf::comm::Address>
using LinkPair = std::vector<std::pair<std::string, std::string>>
Public Types inherited from WsfArticulatedPart
enum  SlewMode { cSLEW_FIXED = 0 , cSLEW_AZ = 1 , cSLEW_EL = 2 , cSLEW_AZ_EL = 3 }
enum  SlewDirection { cUNDEFINED = 0 , cPOSITIVE = 1 , cNEGATIVE = 2 }
enum  {
  cNOT_CUED = 0x0000 , cMIN_AZ = 0x0001 , cMAX_AZ = 0x0002 , cMIN_EL = 0x0004 ,
  cMAX_EL = 0x0008 , cAT_LIMIT_AZ_MASK = 0x0003 , cAT_LIMIT_EL_MASK = 0x000B , cAT_LIMIT_MASK = 0x000F ,
  cCUED_AZ = 0x0010 , cCUED_EL = 0x0020 , cCUED_AZ_EL = 0x0030 , cCUED_MASK = 0x0030
}
enum  CueType { cCUED_TO_NOTHING , cCUED_TO_LOCATION , cCUED_TO_ANGLE }
Public Types inherited from WsfPlatformPart
enum  { cLEVEL_ONE_DEBUG = 0x00000001 , cLEVEL_TWO_DEBUG = 0x00000002 }
using InternalMessageQueue = std::queue<WsfMessage*>
using RecipientMessageQueue = std::queue<std::pair<WsfPlatformPart*, WsfMessage*>>
Public Types inherited from WsfObject
typedef std::vector< WsfStringIdTypeList
 The list of types returned by GetTypeList.
Public Types inherited from WsfComponentT< WsfPlatform >
typedef WsfPlatform ParentType
 This is needed to support the WsfComponentList template.

Public Member Functions

 Comm (const WsfScenario &aScenario, CommType aCommType=cCT_XMT_RCV)
 ~Comm () override=default
Commoperator= (const Comm &aRhs)=delete
Public Member Functions inherited from WsfArticulatedPart
 WsfArticulatedPart (const WsfScenario &aScenario, int aPartType)
 WsfArticulatedPart (const WsfArticulatedPart &aSrc)
 ~WsfArticulatedPart () override
void SetPositionRateECS (const double aDX, const double aDY, const double aDZ)
void GetCurrentPositionRateECS (double &aDX, double &aDY, double &aDZ) const
double GetDX () const
double GetDY () const
double GetDZ () const
void EnableArticulationUpdates (double aSimTime, double aInterval)
void DisableArticulationUpdates (double aSimTime)
void SetArticulationUpdateInterval (double aUpdateInterval)
double GetArticulationUpdateInterval () const
unsigned int GetArticulationUpdateEventEpoch () const
void IncrementArticulationUpdateEventEpoch ()
bool ArticulationUpdateEventActive () const
 Is an 'Update' event active?
void SetArticulationUpdateEventActive (bool aUpdateEventActive)
 Indicate if the 'Update' event is active.
virtual double TimeToCue (double aDesiredAz, double aDesiredEl) const
const int * GetComponentRoles () const override
void * QueryInterface (int aRole) override
const char * GetScriptClassName () const override
bool Initialize (double aSimTime) override
bool ProcessInput (UtInput &aInput) override
void SetPlatform (WsfPlatform *aPlatformPtr) override
virtual void UpdatePosition (double aSimTime)
void OnPlatformUpdated (double, WsfPlatform *) override
SlewMode GetSlewMode () const
 Get the allowed slewing mode.
double GetAzSlewRate () const
 Get the current azimuth slew rate.
double GetElSlewRate () const
 Get the current elevation slew rate.
double GetMaxAzSlewRate () const
 Get the maximum allowable azimuth slew rate.
double GetMaxElSlewRate () const
 Get the maximum allowable elevation slew rate.
double GetMinAzSlew () const
 Gets the minimum azimuth slew limit.
double GetMaxAzSlew () const
 Gets the maximum azimuth slew limit.
double GetMinElSlew () const
 Gets the minimum elevation slew limit.
double GetMaxElSlew () const
 Gets the maximum elevation slew limit.
int GetSlewState () const
 Get the slew limit state.
void SetSlewMode (SlewMode aSlewMode)
 Set the allowed slewing mode.
void SetSlewRates (double aAzSlewRate, double aElSlewRate)
 Set the angular slew rates, limited by the maximum slew rates.
void SetAzSlewLimits (double aMinAzSlew, double aMaxAzSlew)
 Set the azimuth slew limits.
void SetElSlewLimits (double aMinElSlew, double aMaxElSlew)
 Set the elevation slew limits.
void SetAzimuthSlewDirection (SlewDirection aAzSlewDirection)
 Set the azimuth slew direction.
bool IsSlewing () const
bool WithinSlewLimits (double aThisToTgtAz, double aThisToTgtEl) const
SlewMode GetCueMode () const
 Get the allowed cueing mode.
double GetAzCueRate () const
 Get the azimuth cue rate.
double GetElCueRate () const
 Get the elevation cue rate.
double GetMinAzCue () const
 Gets the minimum azimuth cue limit.
double GetMaxAzCue () const
 Gets the maximum azimuth cue limit.
double GetMinElCue () const
 Gets the minimum elevation cue limit.
double GetMaxElCue () const
 Gets the maximum elevation cue limit.
void SetCueMode (SlewMode aCueMode)
 Set the allowed cueing mode.
void SetCueRates (double aAzCueRate, double aElCueRate)
 Set the angular cueing rates.
void SetAzCueLimits (double aMinAzCue, double aMaxAzCue)
 Set the azimuth cueing limits.
void SetElCueLimits (double aMinElCue, double aMaxElCue)
 Set the elevation cueing limits.
double GetRoll () const
void SetRoll (double aRoll)
 Set the platform-relative (ECS) roll angle of the articulated part.
double GetPitch () const
void SetPitch (double aPitch)
double GetYaw () const
void SetYaw (double aYaw)
 Set the platform-relative (ECS) yaw angle of the articulated part.
double GetTilt () const
void SetTilt (double aTilt)
void GetCurrentOrientationECS (double &aYaw, double &aPitch, double &aRoll)
void GetLOS_UnitVectorWCS (double aUnitLOS_WCS[3])
 Get the current WCS Frame Line-Of-Sight unit vector.
CueType GetCueType () const
bool IsCued () const
 Get the cued status.
void ClearCueing ()
bool GetActualCuedOrientation (double &aAzimuth, double &aElevation) const
void GetCurrentCuedOrientation (double &aAzimuth, double &aElevation) const
bool GetCuedLocationWCS (double aCuedLocationWCS[3]) const
void SetCuedLocationWCS (const double aCuedLocationWCS[3])
bool GetCuedOrientation (double &aAzimuth, double &aElevation) const
void SetCuedOrientation (double aAzimuth, double aElevation)
void GetAbsoluteCuedOrientation (double &aAzimuth, double &aElevation, double aBaseNED[3])
void ClearTransientCue ()
bool TransientCueActive () const
bool GetTransientCuedLocationWCS (double aCuedLocationWCS[3]) const
void SetTransientCuedLocationWCS (const double aCuedLocationWCS[3])
WsfStringId GetMaskingPatternState () const
void SetMaskingPatternState (WsfStringId aMaskingPatternStateId)
double GetMaskingPatternFactor (double aViewAzPCS, double aViewElPCS, const double aViewVecWCS[3])
void SetIsPrivate (bool aIsPrivate)
bool IsPrivate () const
Public Member Functions inherited from WsfPlatformPart
 WsfPlatformPart (const WsfScenario &aScenario, int aPartType)
WsfPlatformPartoperator= (const WsfPlatformPart &aRhs)=delete
 ~WsfPlatformPart () override
const int * GetComponentRoles () const override
void * QueryInterface (int aRole) override
bool DebugEnabled () const
 Returns 'true' if debugging is enabled for this instance.
void SetDebugEnabled (bool aDebugEnabled)
unsigned int GetDebugMask ()
bool IsExternallyControlled () const
virtual void SetExternallyControlled (double aSimTime, bool aIsExternallyControlled)
int GetPartType () const
const char * GetScriptClassName () const override
WsfSimulationGetSimulation () const
const WsfScenarioGetScenario () const
WsfStringId GetComponentName () const override
void ComponentParentChanged (WsfPlatform *aPlatformPtr) override
bool Initialize (double aSimTime) override
bool Initialize2 (double aSimTime) override
bool ProcessInput (UtInput &aInput) override
WsfPlatformGetPlatform () const
virtual void PlatformAdded (double aSimTime, WsfPlatform *aPlatformPtr)
virtual void PlatformDeleted (WsfPlatform *aPlatformPtr)
double GetLastStatusChangeTime () const
void SetLastStatusChangeTime (double aSimTime)
 Allows a system to set the time at which the device was initialized.
bool CanBeMadeOperational () const
 Returns an indication that this system can be made operational.
bool CanBeMadeNonOperational () const
 Returns an indication that this system can be made non-operational.
bool CanBeTurnedOn () const
 Returns an indication that this system can be turned on.
bool CanBeTurnedOff () const
 Returns an indication that this system can be turned off.
bool IsTurnedOn () const
bool InitiallyTurnedOn () const
 Is the system to be turned 'on' when added to the simulation?
void SetInitiallyTurnedOn (bool aInitiallyTurnedOn)
 Sets if the system is turned on when added to the simulation.
virtual void Restore (double aSimTime)
bool IsOperational () const
bool SetOperational (double aSimTime, bool aMakeOperational)
double GetDamageFactor () const
bool SetDamageFactor (double aSimTime, double aDamageFactor)
bool IsCritical () const
void SetCritical (bool aValue)
virtual void OnPlatformBrokenEvent (double aSimTime)
 Owning platform has issued a broken event.
bool IsBroken () const
WsfInternalLinksGetInternalLinks ()
 Return the internal links for this part.
virtual bool HasInternalLinks () const
 Does this platform part have a communication link to other platform parts?
virtual bool ProcessMessage (double aSimTime, const WsfMessage &aMessage)
virtual bool ReceiveMessage (double aSimTime, const WsfMessage &aMessage)
virtual void SendMessage (double aSimTime, const WsfMessage &aMessage)
virtual void SendMessageTo (double aSimTime, const WsfMessage &aMessage, WsfStringId aRecipientId)
void SendMessageToProcessor (double aSimTime, const WsfMessage &aMessage, WsfStringId aRecipientId)
virtual void SendQueuedMessages (double aSimTime)
const WsfCategoryListGetCategories () const
 Get the categories to which this part belongs.
void AddCategory (WsfStringId aCategoryId)
 Adds the provided category to the platform part's category list.
bool IsCategoryMember (WsfStringId aCategoryId) const
const WsfGroupListGetGroups () const
 Get the groups to which this platform part belongs.
void JoinGroup (WsfGroup *aGroupPtr)
 Join the given group.
void LeaveGroup (WsfGroup *aGroupPtr)
 Leave the given group.
bool IsGroupMember (WsfStringId aGroupId)
unsigned int GetUpdateEventEpoch () const
void IncrementUpdateEventEpoch ()
bool UpdateEventActive () const
 Is an 'Update' event active?
void SetUpdateEventActive (bool aUpdateEventActive)
 Indicate if the 'Update' event is active.
Public Member Functions inherited from WsfObject
 WsfObject ()
 This is the constructor for the WsfObject class.
 ~WsfObject () override
 This is the destructor for the WsfObject class.
const char * GetScriptClassName () const override
const std::string & GetType () const
WsfStringId GetTypeId () const
 Get the string ID of the 'type' of the object.
void SetType (WsfStringId aType)
const std::string & GetBaseType () const
WsfStringId GetBaseTypeId () const
const TypeListGetTypeList () const
bool IsA_TypeOf (WsfStringId aType) const
WsfObjectoperator= (const WsfObject &aRhs)
 Assignment operator.
template<typename T>
void Serialize (T &aBuff)
 For XIO (de)serialization.
const std::string & GetName () const
WsfStringId GetNameId () const
void SetName (WsfStringId aName)
Public Member Functions inherited from WsfComponentT< WsfPlatform >
 WsfComponentT ()
 WsfComponentT (const WsfComponentT &) noexcept
WsfComponentToperator= (const WsfComponentT &) noexcept
 ~WsfComponentT () override=default
ParentTypeGetComponentParent () const
void SetComponentParent (ParentType *aParentPtr)
Public Member Functions inherited from WsfComponent
virtual ~WsfComponent ()=default
template<typename T>
bool QueryInterfaceT (T *&aRolePtr)
bool ComponentHasRole (int aRole)
 Returns true if the component has the specified role.
Public Member Functions inherited from WsfUniqueId
 WsfUniqueId ()
 Construtor initializes the unique identifier to 0.
 WsfUniqueId (const WsfUniqueId &)
 Copy constructor initializes the unique identifier to 0.
WsfUniqueIdoperator= (const WsfUniqueId &)
unsigned int GetUniqueId () const
 Get the unique identifier assigned to this object.
template<typename T>
void Serialize (T &aBuff)
 For XIO (de)serialization.
Public Member Functions inherited from WsfAuxDataEnabled
 WsfAuxDataEnabled ()=default
 WsfAuxDataEnabled (const WsfAuxDataEnabled &aSrc)=default
WsfAuxDataEnabledoperator= (const WsfAuxDataEnabled &aRhs)
 WsfAuxDataEnabled (WsfAuxDataEnabled &&)=default
WsfAuxDataEnabledoperator= (WsfAuxDataEnabled &&)=default
virtual ~WsfAuxDataEnabled () noexcept
void SetAuxData (const WsfAttributeContainer &aAuxData)
void DeleteAuxData ()
 Delete the aux data container from the object.
void MergeAuxData (const WsfAuxDataEnabled &aSrc)
 Merge the object's aux data with aux data from an existing object.
void UpdateAuxData (const WsfAuxDataEnabled &aSrc)
 Update the object's aux data with aux data from an existing object.
bool HasAuxData () const
 Returns true if this object has aux data.
bool ProcessInput (UtInput &aInput)
template<typename T>
void Serialize (T &aBuff)
 (De)serialization for XIO
WsfAttributeContainerGetAuxData ()
const WsfAttributeContainerGetAuxData () const noexcept
const WsfAttributeContainerGetAuxDataConst () const noexcept
Public Member Functions inherited from WsfSinglePlatformObserver
virtual ~WsfSinglePlatformObserver ()
virtual void OnPlatformDeleting (double aSimTime, WsfPlatform *aPlatformPtr)
 Called before the platform is actually deleted.
virtual void OnPlatformDeleted (double aSimTime, WsfPlatform *aPlatformPtr)
 Called just before the platform is removed from the simulation.

Friends

class Event

Component list support.

A comm contains a list of components.

using ComponentList = WsfComponentListT<WsfComponentT<Comm>>
ComponentListGetComponents ()
const ComponentListGetComponents () const

Send/Receive Action Call

Implementation defined methods for collecting common actions taken for message transmission/reception upon determination of the success or failure of a transmission/reception via Send/Receive call functionality.

ProtocolStack mProtocolStack
 Protocol stack used by this comm device.
Address mInputAddress
 A user supplied address indicated for use with this interface. May be null if not specified.
std::string mInputNetwork
 A user supplied network, for indicating which network this interface should join.
Address mInputNetworkAddress
 A user supplied network address, for indicating which network this interface should join.
size_t mNumChannels
virtual bool SendActions (double aSimTime, bool aSendStatus, Message &aMessage)
virtual bool ReceiveActions (double aSimTime, bool aReceiveStatus, Comm *aXmtrPtr, Message &aMessage)
virtual void PrintDebugReception (double aSimTime, const Message &aMessage) const
 Displays debug info associated with message reception.
 Comm (const Comm &aSrc)
 Copy constructor (for Clone()).
void SetUpdateInterval (double aInterval) override
double GetUpdateInterval () const override
void SetClassId (WsfStringId aClassId)
virtual bool ValidateGateway ()
 Helper method for ensuring/setting valid gateways.

Component infrastructure methods not provided by WsfPlatformPart.

WsfComponentCloneComponent () const override
const int * GetComponentRoles () const override
void * QueryInterface (int aRole) override
int GetComponentInitializationOrder () const override

Common infrastructure methods.

const char * GetScriptClassName () const override
CommClone () const override
 Standard Clone() method.
bool PreInitialize (double aSimTime) override
bool Initialize (double aSimTime) override
bool Initialize2 (double aSimTime) override
void PreInput () override
bool ProcessInput (UtInput &aInput) override
void Update (double aSimTime) override
virtual void Setup ()
virtual void PendingStart ()

Status methods.

void PartBroken (double aSimTime) override
void SetNonOperational (double aSimTime) override
void SetOperational (double aSimTime) override
void TurnOff (double aSimTime) override
void TurnOn (double aSimTime) override

Link Methods

Specifies linkage to this interface.

virtual void AddLinkAddress (const Address &aAddress)
virtual void AddLink (const std::string &aPlatformName, const std::string &aCommName)

Gateway Methods

const AddressGetGateway () const
const std::string & GetGatewayRemotePlatform () const
const std::string & GetGatewayRemoteComm () const
void SetGateway (const Address &aAddress)

CanSendTo

The CanSendTo method provides an interface for use with all comm objects as a unified entry point to determine whether or not another comm device can receive a transmission from this comm object. The determination of this may rely on many factors based on the actual implementation of each comm device. For example, the base case may only check that the receiving comm is on and is able to receive. More advanced versions may rely on the existence of specific hardware, or even EM interactions.

virtual bool CanSendTo (double aSimTime, Comm *aRcvrPtr, Message *aMessagePtr=nullptr)

Send/Receive methods

Note
The send method does not utilize the comm message object at this time for legacy support purposes. It is expected that AFSIM 3.0 will require the usage of the WsfCommMessage for send purposes to mirror the receive call for a multitude of benefits. In addition, it is likely the explicit comm pointer reference will be replaced with an address, such that both send and receive methods will have the same signature.
virtual bool Receive (double aSimTime, Comm *aXmtrPtr, Message &aMessage)
virtual bool Send (double aSimTime, std::unique_ptr< WsfMessage > aMessagePtr, const Address &aAddress)
virtual WSF_DEPRECATED bool Send (double aSimTime, const WsfMessage &aMessage, const Address &aAddress) final

Comm event methods.

virtual bool ProcessLayerMessage (double aSimTime, size_t aLayerIndex, layer::Message aLayerMessage, Message *aCommMessagePtr)
 Process a layer event.
CommType GetCommType () const
 Returns the comm device's true type as was intended on construction.
WsfStringId GetClassId () const
const AddressGetAddress () const
const AddressGetInputAddress () const
 Returns the user indicated interface address.
const std::string & GetNetwork () const
size_t GetNumChannels () const
const std::string & GetInputNetwork () const
 Returns the user indicated network membership.
const AddressGetInputNetworkAddress () const
 Returns the user indicated network membership in address format.
const LinkAddressGetLinkAddresses () const
 Returns the user suppled interface linkage in address format.
const LinkPairGetLinkPairs () const
 Returns the user supplied interface linkage in platform/comm name format.
void SetAddress (const Address &aAddress)
void SetNetwork (const std::string &aNetwork)
virtual std::string GetFullName () const
 Returns comm device name as a string.
virtual bool CanReceive () const
virtual bool CanSend () const
void SetReceiveEnabled (bool aIsEnabled)
void SetTransmitEnabled (bool aIsEnabled)
router::RouterGetRouter () const
void SetRouter (router::Router *aRouterPtr)
const std::string & GetRouterName () const
void SetRouterName (const std::string &aRouterName)
std::vector< ProtocolInterface * > GetSortedProtocols () const

Multicast Methods

MulticastConformanceLevel GetMulticastLevel () const
virtual void SetMulticastLevel ()
ProtocolStackGetProtocolStack ()
 Accessor/mutator for protocol stack.
const ProtocolStackGetProtocolStack () const

Send/Receive Setup Calls

Send/Receive method hooks

Implementation defined methods for collecting common actions taken for message transmission/reception. In the base implementation, the send method takes a newly created comm::Message from a standard WsfMessage and performs necessary setup for comm framework utilization prior/during the public Send call. In the receive setup method, the base implementation simply checks that the comm is on and prints debug information, if applicable.

virtual bool SendSetup (double aSimTime, Message &aMessage, const Address &aAddress)
virtual bool ReceiveSetup (double aSimTime, Comm *aXmtrPtr, Message &aMessage)

Additional Inherited Members

UtCallbackListN< void(double)> SlewComplete
Static Public Attributes inherited from WsfArticulatedPart
static constexpr double cINFINITE_SLEW_RATE = 1.0E+12 * UtMath::cRAD_PER_DEG
static constexpr double cALMOST_FULL_CIRCLE = 359.999 * UtMath::cRAD_PER_DEG
Static Public Attributes inherited from WsfAuxDataEnabled
static UtCallbackListN< void(const WsfAuxDataEnabled *)> AuxDataAccessed
static UtCallbackListN< void(const WsfAuxDataEnabled *)> AuxDataDestroyed
bool FullCircle () const
virtual double GetAzimuthRotationRate () const
virtual double GetElevationRotationRate () const
void SlewToOrientation (double aSimTime, double aDesiredAz, double aDesiredEl)
virtual void TimeToRotate (double &aDeltaAz, double &aDeltaEl, double &aAzRate, double &aElRate, double &aTimeToAz, double &aTimeToEl) const
void UpdateCuedOrientation (double aSimTime)
bool UpdateOrientation (double aSimTime)
 WsfPlatformPart (const WsfPlatformPart &aSrc)
 Copy constructor (for Clone()).
 WsfObject (const WsfObject &aSrc)
 Copy constructor (for Clone()).
Protected Member Functions inherited from WsfUniqueId
void AssignUniqueId (WsfSimulation *aSimulationPtr)
WsfMaskingPatternmMaskingPatternPtr
 The masking factor.
WsfStringId mMaskingPatternName
WsfStringId mMaskingPatternStateId
double mYaw
 The orientation of the device coordinate system.
double mPitch
double mRoll
double mDX
 The velocity of the part.
double mDY
double mDZ
double mTilt
 The tilt angle above below the scan plane.
double mAzSlewRate
 The slewing rates and limits of the device with respect to the device coordinate system.
double mElSlewRate
double mMaxAzSlewRate
double mMaxElSlewRate
double mMinAzSlew
double mMaxAzSlew
double mMinElSlew
double mMaxElSlew
SlewMode mSlewMode
SlewDirection mAzSlewDirection
int mSlewState
double mAzCueRate
 The cueing rates and limits of the device with respect to the device coordinate system.
double mElCueRate
double mMinAzCue
double mMaxAzCue
double mMinElCue
double mMaxElCue
SlewMode mCueMode
 The directions (az and/or el) in which cueing can be performed.
CueType mCueType
bool mTransientCueActive
 'true' if the transient cue is defined
double mCuedLocationWCS [3]
 The cued location if mCueType is cCUED_TO_LOCATION.
double mCuedAz
 The cued azimuth if mCueType == cCUED_TO_ANGLE.
double mCuedEl
 The cued elevation if mCueType == cCUED_TO_ANGLE.
double mTransientCuedLocationWCS [3]
 The transient cue, if mTransientCueActive is true.
double mActualCuedAz
 The actual cued location, subject to the slewing limits.
double mActualCuedEl
double mCurrentAz
double mCurrentEl
double mLastAzElUpdateTime
 The time when the current az/el were last updated.
double mLastUpdateTime
 The time when the x/y/z position was last updated.
bool mSlewMethodCoordinated
 'true' if slcue rates are dynamically adjusted so the target angles are reached simultaneously.
bool mIsSlewing
 'true' if the part is slewing to satisfy a cueing request.
bool mIsPrivate
 'true' if the part is considered 'private' and not to visible to external simulations.

Detailed Description

A base class for communications systems. Comm provides a common interface among all communication devices.

Member Typedef Documentation

◆ ComponentList

◆ LinkAddress

Vectors indicating linkage to this interface, in different user input formats for dynamic and static specification.

◆ LinkPair

using wsf::comm::Comm::LinkPair = std::vector<std::pair<std::string, std::string>>

Member Enumeration Documentation

◆ CommType

Enumerator
cCT_XMT_ONLY 

Transmit only.

cCT_RCV_ONLY 

Receive only.

cCT_XMT_RCV 

Transmit and receive.

◆ MulticastConformanceLevel

enum class wsf::comm::Comm::MulticastConformanceLevel : size_t
strong

Enum for multicast conformance level. Based on the presence (or lack thereof) of multicasting protocols on the comm and/or the associated router. As such, the value used to describe any particular comm implementation is not set until the comm framework has been processed, starting with Initialize2()

Enumerator
cLEVEL_0 
cLEVEL_1 
cLEVEL_2 

Constructor & Destructor Documentation

◆ Comm() [1/2]

◆ ~Comm()

wsf::comm::Comm::~Comm ( )
overridedefault

◆ Comm() [2/2]

wsf::comm::Comm::Comm ( const Comm & aSrc)
protected

Member Function Documentation

◆ AddLink()

virtual void wsf::comm::Comm::AddLink ( const std::string & aPlatformName,
const std::string & aCommName )
inlinevirtual

◆ AddLinkAddress()

virtual void wsf::comm::Comm::AddLinkAddress ( const Address & aAddress)
inlinevirtual

◆ CanReceive()

virtual bool wsf::comm::Comm::CanReceive ( ) const
inlinevirtual

Returns whether the comm device can currently transmit or receive. This determination can be based on may factors and can be modified by derived classes.

Referenced by CanSendTo(), and wsf::comm::RadioXmtrRcvr::CanSendTo().

◆ CanSend()

virtual bool wsf::comm::Comm::CanSend ( ) const
inlinevirtual

◆ CanSendTo()

bool wsf::comm::Comm::CanSendTo ( double aSimTime,
Comm * aRcvrPtr,
Message * aMessagePtr = nullptr )
virtual

◆ Clone()

Comm * wsf::comm::Comm::Clone ( ) const
overridevirtual

◆ CloneComponent()

WsfComponent * wsf::comm::Comm::CloneComponent ( ) const
inlineoverridevirtual

Clones a component. May return null if component does not support clone.

Implements WsfComponent.

References Clone().

◆ GetAddress()

const Address & wsf::comm::Comm::GetAddress ( ) const
inline

Returns the comm device's unique address.

Returns
Returns the comm device's unique address.

Referenced by wsf::comm::router::Router::AddInterface(), wsf::comm::router::OSPF_Area::AddRemovedInterfaceBDR(), wsf::comm::router::OSPF_Area::AddRemovedInterfaceDR(), wsf::comm::router::Router::AutomateAddedLinkage(), wsf::comm::router::Router::Broadcast(), wsf::comm::router::OSPF_Area::ElectionDR(), wsf::comm::Network::GetAddressFromNamedComm(), getLinkedAndReachablePlatformParts(), wsf::comm::NetworkManager::InitializeUserLinks(), wsf::comm::router::ProtocolAdHoc::PerfectCommAdded(), wsf::comm::router::Router::PerfectCommAdded(), wsf::comm::router::Router::PerfectCommDisabled(), wsf::comm::router::Router::PerfectCommEnabled(), wsf::comm::router::ProtocolAdHoc::PerfectCommRemoved(), wsf::comm::router::Router::PerfectCommRemoved(), wsf::event::utils::PrintCommData(), WsfUplinkProcessor::ProcessMessage(), wsf::comm::DatalinkLayer::PurgeQueue(), wsf::comm::router::Router::Receive(), ReceiveActions(), wsf::comm::router::ProtocolAdHoc::Send(), wsf::comm::router::ProtocolLegacy::Send(), wsf::comm::router::ProtocolMulticast::Send(), wsf::comm::router::ProtocolOSPF::Send(), wsf::comm::router::rip::RIPv2::Send(), wsf::comm::router::Router::Send(), WsfRIPRJob::SendMessageBidJob(), WsfRIPRProcessor::SendMessageJobAward(), WsfRIPRJob::SendMessageSetProgress(), WsfRIPRJob::SendMessageUnbidJob(), SendSetup(), WsfTaskManager::SendTaskMessage(), wsf::comm::medium::Guided::TransmitMessage(), wsf::comm::medium::Unguided::TransmitMessage(), ValidateGateway(), and wsf::comm::router::Router::ValidateGateway().

◆ GetClassId()

WsfStringId wsf::comm::Comm::GetClassId ( ) const
inline

Get the class ID associated with the object (poor mans RTTI).

Returns
Returns the associated class ID.

Referenced by wsf::comm::Component::CanInteractWith(), wsf::comm::ComponentHW::CanInteractWith(), CanSendTo(), WsfJTIDS_Terminal::ReceiveSetup(), and WsfL16::Interface::SendJMessage().

◆ GetCommType()

CommType wsf::comm::Comm::GetCommType ( ) const
inline

Returns the comm device's true type as was intended on construction.

◆ GetComponentInitializationOrder()

int wsf::comm::Comm::GetComponentInitializationOrder ( ) const
inlineoverridevirtual

Forces a specific initialization order. Components are initialized in increasing initialization order value.

Reimplemented from WsfComponent.

References cWSF_INITIALIZE_ORDER_COMM.

◆ GetComponentRoles()

const int * wsf::comm::Comm::GetComponentRoles ( ) const
overridevirtual

Returns a zero-terminated array of component roles. Note that the array should be in decreasing order of specificity and should generally the inheritance hierarchy. The first entry should be the components 'primary' role. For example a sensor would do the following:

return roles;
@ cWSF_COMPONENT_SENSOR
A 'sensor' component (WsfSensor).
Definition WsfComponentRoles.hpp:105
@ cWSF_COMPONENT_PLATFORM_PART
The component derives from WsfPlatformPart.
Definition WsfComponentRoles.hpp:98
@ cWSF_COMPONENT_ARTICULATED_PART
The component derives from WsfArticulatedPart.
Definition WsfComponentRoles.hpp:99

Implements WsfComponent.

References cWSF_COMPONENT_ARTICULATED_PART, cWSF_COMPONENT_COMM, cWSF_COMPONENT_NULL, and cWSF_COMPONENT_PLATFORM_PART.

◆ GetComponents() [1/2]

◆ GetComponents() [2/2]

const ComponentList & wsf::comm::Comm::GetComponents ( ) const
inline

◆ GetFullName()

◆ GetGateway()

const Address & wsf::comm::Comm::GetGateway ( ) const
inline

◆ GetGatewayRemoteComm()

const std::string & wsf::comm::Comm::GetGatewayRemoteComm ( ) const
inline

◆ GetGatewayRemotePlatform()

const std::string & wsf::comm::Comm::GetGatewayRemotePlatform ( ) const
inline

◆ GetInputAddress()

const Address & wsf::comm::Comm::GetInputAddress ( ) const
inline

Returns the user indicated interface address.

References mInputAddress.

◆ GetInputNetwork()

const std::string & wsf::comm::Comm::GetInputNetwork ( ) const
inline

Returns the user indicated network membership.

References mInputNetwork.

◆ GetInputNetworkAddress()

const Address & wsf::comm::Comm::GetInputNetworkAddress ( ) const
inline

Returns the user indicated network membership in address format.

References mInputNetworkAddress.

◆ GetLinkAddresses()

const LinkAddress & wsf::comm::Comm::GetLinkAddresses ( ) const
inline

Returns the user suppled interface linkage in address format.

Referenced by wsf::comm::NetworkManager::InitializeUserLinks().

◆ GetLinkPairs()

const LinkPair & wsf::comm::Comm::GetLinkPairs ( ) const
inline

Returns the user supplied interface linkage in platform/comm name format.

Referenced by wsf::comm::NetworkManager::InitializeUserLinks().

◆ GetMulticastLevel()

MulticastConformanceLevel wsf::comm::Comm::GetMulticastLevel ( ) const
inline

◆ GetNetwork()

◆ GetNumChannels()

size_t wsf::comm::Comm::GetNumChannels ( ) const
inline

Returns the number of channels this comm can support (hardware definition).

References mNumChannels.

◆ GetProtocolStack() [1/2]

ProtocolStack & wsf::comm::Comm::GetProtocolStack ( )
inline

◆ GetProtocolStack() [2/2]

const ProtocolStack & wsf::comm::Comm::GetProtocolStack ( ) const
inline

References mProtocolStack.

◆ GetRouter()

router::Router * wsf::comm::Comm::GetRouter ( ) const
inline

Gets/sets the router this comm is assigned to.

Note
Setting the router interface should only be done by the router itself under normal circumstances. The router pointer is provided as a convenience method, and can be modified by adding/removing the comm via the router methods.

Referenced by wsf::comm::router::Router::AddInterface(), CanSendTo(), wsf::comm::RadioXmtrRcvr::CanSendTo(), wsf::comm::NetworkManager::InitializeUserLinks(), wsf::comm::NetworkLayer::Receive(), wsf::comm::NetworkLayer::Send(), and wsf::comm::PhysicalLayer::Send().

◆ GetRouterName()

const std::string & wsf::comm::Comm::GetRouterName ( ) const
inline

◆ GetScriptClassName()

const char * wsf::comm::Comm::GetScriptClassName ( ) const
override

◆ GetSortedProtocols()

◆ GetUpdateInterval()

double wsf::comm::Comm::GetUpdateInterval ( ) const
inlineoverrideprotectedvirtual

Get interval at which Update() is called. This value is set by calling WsfSimulation::GetInstance().SetProcessorUpdateInterval();

Implements WsfPlatformPart.

◆ Initialize()

bool wsf::comm::Comm::Initialize ( double aSimTime)
overridevirtual

Perform phase 1 initialization. This is called by WsfPlatform::Initialize() during phase 1 initialization of the platform. The component should complete validation of input data that could not be done by ProcessInput, as well as any other functions to prepare for simulation use (subject to the next paragraph).

The order in which components are initialized is defined by GetComponentInitializationOrder. In general a component implementation of this method should not be dependent on the state of another component, i.e.: it should not assume that the other components Initialize() method has been called. If such a dependency exists one should use Initialize2() if possible, or specify a value GetComponentInitializationOrder to force things to initialize in a particular order.

Parameters
aSimTimeThe current simulation time.
Returns
true if successful or false if unsuccessful (bad input data, etc.)
Note
This method should NOT add any other components to the platform. This MUST be done in PreInitialize().

Add this comm to be managed by the network manager

Reimplemented from WsfComponent.

Reimplemented in WsfJTIDS_Terminal.

References wsf::comm::NetworkManager::AddManagedComm(), WsfPlatformPart::DebugEnabled(), wsf::comm::medium::ContainerComponent< PARENT >::Find(), WsfSimulation::GetCommNetworkManager(), WsfPlatformPart::GetSimulation(), WsfArticulatedPart::Initialize(), mProtocolStack, and ok.

Referenced by GetScriptClassName(), and WsfJTIDS_Terminal::Initialize().

◆ Initialize2()

bool wsf::comm::Comm::Initialize2 ( double aSimTime)
overridevirtual

Perform phase 2 initialization. This is called by WsfPlatform::Initialize() during phase 2 of platform initialization. This method is typically used when a component may have some dependency on another component having completed its phase 1 initialization. The component should be ready for use in the simulation upon completion of this method.

The order in which components are initialized is defined by GetComponentInitializationOrder.

Parameters
aSimTimeThe current simulation time.
Returns
true if successful or false if unsuccessful.
Note
This method MUST NOT add any other components to the platform. This MUST be done in PreInitialize().

Reimplemented from WsfComponent.

References WsfComponent::Initialize2(), mProtocolStack, and ok.

Referenced by GetScriptClassName().

◆ operator=()

Comm & wsf::comm::Comm::operator= ( const Comm & aRhs)
delete

References Comm().

◆ PartBroken()

void wsf::comm::Comm::PartBroken ( double aSimTime)
overridevirtual

Status change to Broken. Terminally, mortally wounded.

Parameters
aSimTimeThe current simulation time.
Note
This method should not be invoked directly by application code.

Reimplemented from WsfPlatformPart.

References WsfObserver::CommBroken(), WsfPlatformPart::GetSimulation(), and WsfPlatformPart::PartBroken().

Referenced by GetScriptClassName().

◆ PendingStart()

void wsf::comm::Comm::PendingStart ( )
virtual

References GetComponents().

Referenced by GetScriptClassName().

◆ PreInitialize()

bool wsf::comm::Comm::PreInitialize ( double aSimTime)
overridevirtual

Perform pre-initializion function. This is called by WsfPlatform::Initialize prior to actually initializing the components on a platform (i.e.: calling Initialize and Initialize2 for each component). The primary reason for this method is to allow components to add other components that will then be subsequently initialized. The component may examine the component list and add components, but it must not assume ANYTHING about the actual state of the component.

Parameters
aSimTimeThe current simulation time.
Returns
true if successful or false if unsuccessful (bad input data, etc.)

Reimplemented from WsfComponent.

References WsfPlatformPart::GetScenario(), ok, WsfComponent::PreInitialize(), and WsfComponentFactoryList< PARENT_TYPE >::PreInitialize().

Referenced by GetScriptClassName().

◆ PreInput()

void wsf::comm::Comm::PreInput ( )
overridevirtual

Perform pre-input processing. This is called in certain contexts just before input processing is FIRST done for a component (See WsfObjectTypeListBase::LoadComponentP.) The primary motivation is to allow the newly created component to invoke the type/role-specific PreInput method in the component factories, which may in turn add any sub-components that MAY be required for input processing or for run-time.

This is currently implemented only for platform level components such as WsfComm, WsfProcessor, WsfSensor and some components implemented in optional projects. You can look at the PreInput methods in each of these and see they are very simple.

The reason for this is that WsfObjectTypeListBase::LoadComponentP cannot simply invoke the PreInput methods in the component factories. PreInput is only defined in the template WsfComponentFactoryT<>, and the PreInput method in the template defines a method whose argument is a reference to the object being created. There is no way for LoadComponentP to do this in general. Delegating it to to component solves the problem.

Note
This method may get called more than once as input objects derive from other input type-objects.

Reimplemented from WsfComponent.

References WsfPlatformPart::GetScenario(), and WsfComponentFactoryList< PARENT_TYPE >::PreInput().

Referenced by GetScriptClassName().

◆ PrintDebugReception()

void wsf::comm::Comm::PrintDebugReception ( double aSimTime,
const Message & aMessage ) const
protectedvirtual

Displays debug info associated with message reception.

Reimplemented in WsfJTIDS_Terminal.

References GetFullName(), and wsf::comm::Message::SourceMessage().

Referenced by ReceiveSetup().

◆ ProcessInput()

bool wsf::comm::Comm::ProcessInput ( UtInput & aInput)
overridevirtual

Process input from a generic source.

Examine the current input command. If it is NOT one of the commands recognized by this class then it simply returns 'false'. If it is one of the commands recognized by this class then it processes the command and returns 'true'.

Parameters
aInputa reference to a UtInput object.
Returns
'true' if the command was one recognized by the class or 'false' if not.
Exceptions
UtInput::ExceptionBase(or an object derived from it) if the command was recognized but contains some sort of error.
Note
If a derived class does not recognize the command (i.e.: the return value is false) then it should call the base class ProcessInput method. This chain should continue until either the command is recognized or the top-level base class is encountered.

Reimplemented from WsfObject.

References WsfPlatformPart::GetScenario(), mInputAddress, mInputNetwork, mInputNetworkAddress, mNumChannels, mProtocolStack, WsfComponentFactoryList< PARENT_TYPE >::ProcessAddOrEditCommand(), WsfComponentFactoryList< PARENT_TYPE >::ProcessDeleteCommand(), wsf::comm::Address::ProcessInput(), WsfArticulatedPart::ProcessInput(), and WsfComponentFactoryList< PARENT_TYPE >::ProcessInput().

Referenced by GetScriptClassName().

◆ ProcessLayerMessage()

bool wsf::comm::Comm::ProcessLayerMessage ( double aSimTime,
size_t aLayerIndex,
layer::Message aLayerMessage,
Message * aCommMessagePtr )
virtual

Process a layer event.

References mProtocolStack.

◆ QueryInterface()

void * wsf::comm::Comm::QueryInterface ( int aRole)
overridevirtual

Requests a component's role interface. A component can support one or more roles.

Parameters
aRoleThe role whose interface is to be returned.
Returns
A pointer to the object if it supports the indicated role, or 'null' if it does not. Usage: WsfProcessor* procPtrOrNull = (WsfProcessor*)componentPtr->QueryComponentInterface(cWSF_COMPONENT_PROCESSOR);

Implements WsfComponent.

References cWSF_COMPONENT_ARTICULATED_PART, cWSF_COMPONENT_COMM, cWSF_COMPONENT_PLATFORM_PART, WsfArticulatedPart::WsfArticulatedPart(), and WsfPlatformPart::WsfPlatformPart().

◆ Receive()

bool wsf::comm::Comm::Receive ( double aSimTime,
Comm * aXmtrPtr,
Message & aMessage )
virtual

Receive a message. It is the responsibility of the receiver to actually determine if the message can be received (i.e. line-of-sight, enough power, etc).

Parameters
aSimTimeThe current simulation time.
aXmtrPtrThe comm device that sent the message.
aMessageThe received message.
Returns
true if the message was received or false if it could not.

References Comm(), mProtocolStack, wsf::comm::Component::Receive(), ReceiveActions(), and ReceiveSetup().

◆ ReceiveActions()

bool wsf::comm::Comm::ReceiveActions ( double aSimTime,
bool aReceiveStatus,
Comm * aXmtrPtr,
Message & aMessage )
virtual

◆ ReceiveSetup()

bool wsf::comm::Comm::ReceiveSetup ( double aSimTime,
Comm * aXmtrPtr,
Message & aMessage )
virtual

◆ Send() [1/2]

bool wsf::comm::Comm::Send ( double aSimTime,
const WsfMessage & aMessage,
const Address & aAddress )
finalvirtual

Deprecated in favor of passing a unique_ptr to Send so that send doesn't have to perform a deepcopy of the message.

References Send().

◆ Send() [2/2]

bool wsf::comm::Comm::Send ( double aSimTime,
std::unique_ptr< WsfMessage > aMessagePtr,
const Address & aAddress )
virtual

◆ SendActions()

bool wsf::comm::Comm::SendActions ( double aSimTime,
bool aSendStatus,
Message & aMessage )
virtual

Referenced by Send().

◆ SendSetup()

◆ SetAddress()

void wsf::comm::Comm::SetAddress ( const Address & aAddress)
inline

Sets the comm devices' unique address.

Parameters
aAddressThe unique address.

Referenced by wsf::comm::NetworkManager::AddComm(), and wsf::comm::NetworkManager::AddComm().

◆ SetClassId()

void wsf::comm::Comm::SetClassId ( WsfStringId aClassId)
inlineprotected

Sets the class ID associated with this object (poor mans RTTI).

Parameters
aClassIdSets the associated class ID.

Referenced by wsf::comm::LASER_XmtrRcvr::LASER_XmtrRcvr(), wsf::comm::RadioXmtrRcvr::RadioXmtrRcvr(), WsfJTIDS_Terminal::WsfJTIDS_Terminal(), WsfSubsurfaceRadioXmtrRcvr::WsfSubsurfaceRadioXmtrRcvr(), and wsf::comm::XmtrRcvr::XmtrRcvr().

◆ SetGateway()

void wsf::comm::Comm::SetGateway ( const Address & aAddress)

◆ SetMulticastLevel()

void wsf::comm::Comm::SetMulticastLevel ( )
virtual

The set method for multicast level is determined by the availability of particular protocols. It should be called to set the multicast conformance level if any protocols change or the defined router for this interface is modified.

References cLEVEL_0, cLEVEL_1, cLEVEL_2, cWSF_COMPONENT_COMM_PROTOCOL_IGMP, cWSF_COMPONENT_COMM_ROUTER_PROTOCOL_MULTICAST, WsfComponentListT< COMPONENT_TYPE >::GetComponentEntryByRole(), and GetComponents().

Referenced by SetRouter(), and Setup().

◆ SetNetwork()

void wsf::comm::Comm::SetNetwork ( const std::string & aNetwork)
inline

◆ SetNonOperational()

void wsf::comm::Comm::SetNonOperational ( double aSimTime)
overridevirtual

Status change to non-operational.

Parameters
aSimTimeThe current simulation time.
Note
This method should not be invoked directly by application code.

Reimplemented from WsfPlatformPart.

References WsfObserver::CommNonOperational(), WsfPlatformPart::GetSimulation(), and WsfPlatformPart::SetNonOperational().

Referenced by GetScriptClassName().

◆ SetOperational()

void wsf::comm::Comm::SetOperational ( double aSimTime)
overridevirtual

Status change to Operational.

Parameters
aSimTimeThe current simulation time.
Note
This method should not be invoked directly by application code.

Reimplemented from WsfPlatformPart.

References WsfObserver::CommOperational(), WsfPlatformPart::GetSimulation(), and WsfPlatformPart::SetOperational().

Referenced by GetScriptClassName().

◆ SetReceiveEnabled()

void wsf::comm::Comm::SetReceiveEnabled ( bool aIsEnabled)
inline

Sets the current state of the device to receive or transmit.

Parameters
aIsEnabledTrue if the comm device is enabled.

◆ SetRouter()

void wsf::comm::Comm::SetRouter ( router::Router * aRouterPtr)

◆ SetRouterName()

void wsf::comm::Comm::SetRouterName ( const std::string & aRouterName)
inline

◆ SetTransmitEnabled()

void wsf::comm::Comm::SetTransmitEnabled ( bool aIsEnabled)
inline

◆ Setup()

void wsf::comm::Comm::Setup ( )
virtual

Set the multicast conformance level

References GetComponents(), GetFullName(), SetMulticastLevel(), and ValidateGateway().

Referenced by GetScriptClassName().

◆ SetUpdateInterval()

void wsf::comm::Comm::SetUpdateInterval ( double aUpdateInterval)
inlineoverrideprotectedvirtual

Set the time interval between the periodic calls to Update(). A value of less than or equal to zero indicates periodic updates are not to be performed.

Parameters
aUpdateIntervalThe new update interval.
Note
Users should call WsfSimulation::GetInstance().SetProcessorUpdateInterval() to set the interval.

Implements WsfPlatformPart.

◆ TurnOff()

void wsf::comm::Comm::TurnOff ( double aSimTime)
overridevirtual

Turn off the communication device.

Parameters
aSimTimeThe current simulation time.
Note
This method should not be invoked directly by application code. Use the WsfSimulation::TurnCommOff method.

Reimplemented from WsfPlatformPart.

Reimplemented in WsfJTIDS_Terminal.

References WsfObserver::CommTurnedOff(), GetComponents(), WsfPlatformPart::GetSimulation(), and WsfPlatformPart::TurnOff().

Referenced by GetScriptClassName(), and WsfJTIDS_Terminal::TurnOff().

◆ TurnOn()

void wsf::comm::Comm::TurnOn ( double aSimTime)
overridevirtual

Turn on the communication device.

Parameters
aSimTimeThe current simulation time.
Note
This method should not be invoked directly by application code. Use the WsfSimulation::TurnCommOn method.

Reimplemented from WsfPlatformPart.

References WsfObserver::CommTurnedOn(), GetComponents(), WsfPlatformPart::GetSimulation(), and WsfPlatformPart::TurnOn().

Referenced by GetScriptClassName().

◆ Update()

void wsf::comm::Comm::Update ( double aSimTime)
overridevirtual

Update the state of the communications system. This method should perform any actions that are necessary so that the system reflects its condition at the supplied time.

Parameters
aSimTimeThe current simulation time.

Reimplemented from WsfPlatformPart.

◆ ValidateGateway()

bool wsf::comm::Comm::ValidateGateway ( )
protectedvirtual

◆ Event

friend class Event
friend

References Event.

Referenced by Event.

Member Data Documentation

◆ mInputAddress

Address wsf::comm::Comm::mInputAddress
protected

A user supplied address indicated for use with this interface. May be null if not specified.

Addressing user or implementation variables These are the variables used by the network manager to drive addressing and network membership. These are typically provided by user input, or may be modified by a comm derivation to drive how the comm is ultimately addressed in the simulation.

Referenced by Comm(), Comm(), GetInputAddress(), and ProcessInput().

◆ mInputNetwork

std::string wsf::comm::Comm::mInputNetwork
protected

A user supplied network, for indicating which network this interface should join.

Referenced by Comm(), Comm(), GetInputNetwork(), ProcessInput(), and WsfJTIDS_Terminal::WsfJTIDS_Terminal().

◆ mInputNetworkAddress

Address wsf::comm::Comm::mInputNetworkAddress
protected

A user supplied network address, for indicating which network this interface should join.

Referenced by Comm(), Comm(), GetInputNetworkAddress(), and ProcessInput().

◆ mNumChannels

size_t wsf::comm::Comm::mNumChannels
protected

The number of channels, or simultaneous transmissions, that this comm model is capable of supporting. Note that this value may limit or be limited by the actual medium being used by this comm, which is determined at runtime.

Referenced by Comm(), Comm(), GetNumChannels(), and ProcessInput().

◆ mProtocolStack


The documentation for this class was generated from the following files:
Copyrights Multiple, All Rights Reserved