12#ifndef WSFUCI_PARTCOMPONENT_HPP
13#define WSFUCI_PARTCOMPONENT_HPP
15#include "wsf_oms_uci_export.h"
17#include "UtCallbackHolder.hpp"
24#include "uci/type/MessageStateEnum.h"
59 const std::string& aRemark)
71 const uci::type::MessageStateEnum::EnumerationItem& aMessageState);
85 const std::string& aServiceID)
120 bool HasControl(
const std::string& aCapbilityUUID,
121 uci::type::ServiceID_Type& aServiceID,
122 uci::type::SystemID_Type& aSystemID);
125 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) = 0;
128 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) = 0;
131 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) = 0;
133 template <
typename CommandStatusMessage,
136 const uci::type::MessageStateEnum::EnumerationItem& aMessageState,
137 const CommandID& aCommandID)
142 msg.Get().setMessageState(aMessageState);
145 ownPro.Get().setValue(ismownpro::type::CVEnumISMOwnerProducerValues::ISMOWNPRO_USA);
146 msg.Get().getSecurityAttributesGroup().getOwnerProducer().push_back(ownPro.Get());
148 auto& data = msg.Get().getMessageData();
149 data.setCommandID(aCommandID);
155 catch (
const uci::base::UCIException& ex)
157 ut::log::error() << ex.what() <<
":" << ex.getErrorCode();
162 const uci::type::ControlRequestID_Type& aRequestID);
165 const uci::type::MessageStateEnum::EnumerationItem& aMessageState);
168 const uci::type::MessageStateEnum::EnumerationItem& aMessageState);
171 const uci::type::MessageStateEnum::EnumerationItem& aMessageState);
173 virtual void TurnOn(
double aSimTime)
override;
175 virtual void TurnOff(
double aSimTime)
override;
179 template <
typename CapabilityStatusMessage>
184 auto& data = aMessagePtr->Get().getMessageData();
185 for (
size_t i = 0; i < data.getCapabilityStatus().size(); ++i)
187 auto availability = uci::type::CapabilityAvailabilityEnum::UCI_AVAILABLE;
188 auto& currentAvailability = data.getCapabilityStatus().at(i).getAvailabilityInfo().getAvailability();
190 currentAvailability == uci::type::CapabilityAvailabilityEnum::UCI_DISABLED)
192 availability = uci::type::CapabilityAvailabilityEnum::UCI_DISABLED;
194 data.getCapabilityStatus().at(i).getAvailabilityInfo().setAvailability(availability);
197 catch (
const uci::base::UCIException& ex)
199 ut::log::error() << ex.what() <<
":" << ex.getErrorCode();
207 template <
typename CapabilityStatusMessage>
209 const size_t aIndex)
const
211 auto availability = uci::type::CapabilityAvailabilityEnum::UCI_AVAILABLE;
212 auto& currentAvailability = aMessagePtr->Get().getMessageData().getCapabilityStatus().at(aIndex).getAvailabilityInfo().getAvailability();
215 availability = uci::type::CapabilityAvailabilityEnum::UCI_DISABLED;
219 availability = currentAvailability;
230 const std::string& aMessageType);
233 const std::string& aMessageType,
234 const std::string& aReason);
243 uci::type::CommandStateEnum::EnumerationItem
mCommandState{ uci::type::CommandStateEnum::UCI_ACCEPTED };
258 bool HandleAcquireMessage(
const UCI_ControlRequestMessage& aMessage);
260 bool HandleReleaseMessage(
const UCI_ControlRequestMessage& aMessage);
262 std::string GetApprovalTypeString(
const uci::type::ApprovalEnum::EnumerationItem& aApprovalType);
271 size_t aPlatformIndex,
272 double aSendInterval = 10)
274 , mUCI_ComponentPtr(aUCI_Component)
275 , mSendInterval(aSendInterval)
276 , mPlatformIndex(aPlatformIndex) {}
284 double mSendInterval{ 10 };
285 size_t mPlatformIndex;
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
Definition WsfArticulatedPart.hpp:36
ParentType * GetComponentParent() const
Definition WsfComponent.hpp:154
EventDisposition
Definition WsfEvent.hpp:37
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
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
bool CanHandleMessage() const
Definition WsfUCI_Component.hpp:95
UCI_Component(const WsfScenario &aScenario, int aPartType)
Definition WsfUCI_Component.cpp:28
UCI_Message_Event(UCI_PartComponent *aUCI_Component, double aSimTime, size_t aPlatformIndex, double aSendInterval=10)
Definition WsfUCI_PartComponent.hpp:269
WsfEvent::EventDisposition Execute() override
Definition WsfUCI_PartComponent.cpp:876
~UCI_Message_Event() override=default
Definition WsfUCI_PartComponent.hpp:35
uci::type::CapabilityAvailabilityEnum::EnumerationItem GetCapabilityAvailability(const CapabilityStatusMessage *aMessagePtr, const size_t aIndex) const
Definition WsfUCI_PartComponent.hpp:208
virtual void SendUpdateMessages(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)
Definition WsfUCI_PartComponent.cpp:698
uci::type::CommandStateEnum::EnumerationItem GetCommandState() const
Definition WsfUCI_PartComponent.hpp:56
void SendCommandStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState, const CommandID &aCommandID)
Definition WsfUCI_PartComponent.hpp:135
virtual void SendActivityMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)=0
std::map< std::string, std::string > mCapabilityToUUID
Definition WsfUCI_PartComponent.hpp:240
std::unique_ptr< UCI_ControlStatusMessage > mControlStatusMessagePtr
Definition WsfUCI_PartComponent.hpp:236
UtCallbackHolder mCallbacks
Definition WsfUCI_PartComponent.hpp:247
virtual void SetOwnerProducer(const ISM_OwnerProducerType &aOwnerType)
Definition WsfUCI_PartComponent.cpp:691
std::unique_ptr< UCI_SubsystemStatusMessage > mSubsystemStatusMessagePtr
Definition WsfUCI_PartComponent.hpp:237
virtual std::set< std::string > GetCapabilityUUIDs() const override
Definition WsfUCI_PartComponent.cpp:681
void UpdateSubsystemStatusMessage(uci::type::SubsystemStateEnum::EnumerationItem aState)
Definition WsfUCI_PartComponent.cpp:838
bool CheckPartStatus(WsfArticulatedPart *aPartPtr)
Definition WsfUCI_PartComponent.cpp:121
uci::type::CommandStateEnum::EnumerationItem mCommandState
Definition WsfUCI_PartComponent.hpp:243
virtual void Detach()
Definition WsfUCI_PartComponent.hpp:114
bool HasControl(const std::string &aCapbilityUUID, uci::type::ServiceID_Type &aServiceID, uci::type::SystemID_Type &aSystemID)
Definition WsfUCI_PartComponent.cpp:200
std::map< std::string, std::set< Controller > > mSecondaryControllers
Definition WsfUCI_PartComponent.hpp:251
virtual ~UCI_PartComponent()=default
void SetUpdateMessageTime(double aUpdateTime)
Definition WsfUCI_PartComponent.hpp:51
virtual void SetAllCapabilitiesAvailability(const uci::type::CapabilityAvailabilityEnum::EnumerationItem &aAvailability)=0
double GetUpdateMessageTime() const
Definition WsfUCI_PartComponent.hpp:52
std::string GetRemarks() const
Definition WsfUCI_PartComponent.hpp:55
const int * GetComponentRoles() const override
Definition WsfUCI_PartComponent.cpp:98
bool mIsCommanded
Definition WsfUCI_PartComponent.hpp:246
static const int cWSF_COMPONENT_UCI_PART
Definition WsfUCI_PartComponent.hpp:41
void UpdateCapabilityStatusMessage(CapabilityStatusMessage *aMessagePtr)
Definition WsfUCI_PartComponent.hpp:180
double mUpdateMessageTime
Definition WsfUCI_PartComponent.hpp:241
virtual void SendCapabilityMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)=0
std::map< std::string, std::string > mActivityToCabability
Definition WsfUCI_PartComponent.hpp:242
void SetRejectedCurrentlyCommanded(const std::string &aPartName)
Definition WsfUCI_PartComponent.cpp:156
bool mInitialMessagesSent
Definition WsfUCI_PartComponent.hpp:245
bool HandleControlRequestMessage(const UCI_ControlRequestMessage &aMessage)
Definition WsfUCI_PartComponent.cpp:167
virtual void ClearActivities()=0
virtual void TurnOff(double aSimTime) override
Definition WsfUCI_PartComponent.cpp:796
std::map< std::string, Controller > mPrimaryController
Definition WsfUCI_PartComponent.hpp:250
virtual uci::type::ApprovalEnum::EnumerationItem GetApprovalType() const
Definition WsfUCI_PartComponent.hpp:205
std::unique_ptr< UCI_SystemStatusMessage > mSystemStatusMessagePtr
Definition WsfUCI_PartComponent.hpp:238
bool IsCommandAccepted() const
Definition WsfUCI_PartComponent.hpp:108
virtual void SendControlStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)
Definition WsfUCI_PartComponent.cpp:277
virtual void SendControlRequestStatusMessage(double aSimTime, const uci::type::ControlRequestID_Type &aRequestID)
Definition WsfUCI_PartComponent.cpp:240
UCI_PartComponent()=delete
virtual void PrintMessageSent(double aSimTime, const std::string &aMessageType)
Definition WsfUCI_PartComponent.cpp:850
virtual void PrintMessageNotSent(double aSimTime, const std::string &aMessageType, const std::string &aReason)
Definition WsfUCI_PartComponent.cpp:861
virtual void SendSystemStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)
Definition WsfUCI_PartComponent.cpp:764
virtual void SendSubsystemStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)
Definition WsfUCI_PartComponent.cpp:733
void * QueryInterface(int aRole) override
Definition WsfUCI_PartComponent.cpp:109
virtual void TurnOn(double aSimTime) override
Definition WsfUCI_PartComponent.cpp:807
std::string mRemarks
Definition WsfUCI_PartComponent.hpp:244
bool Initialize2(double aSimTime) override
Definition WsfUCI_PartComponent.cpp:39
std::map< std::string, std::set< Controller > > mManagerControllers
Definition WsfUCI_PartComponent.hpp:252
virtual void UpdateAllMessages()=0
uci::type::ApprovalEnum::EnumerationItem mApprovalType
Definition WsfUCI_PartComponent.hpp:254
virtual void SendCapabilityStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)=0
void ClearRemarks()
Definition WsfUCI_PartComponent.hpp:54
virtual bool ProcessMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfUCI_PartComponent.cpp:716
void UpdateCommandResults(const uci::type::CommandStateEnum::EnumerationItem &aState, const std::string &aRemark)
Definition WsfUCI_PartComponent.hpp:58
bool ProcessInput(UtInput &aInput) override
Definition WsfUCI_PartComponent.cpp:83
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
std::string mServiceID
Definition WsfUCI_PartComponent.hpp:105
std::string mSystemID
Definition WsfUCI_PartComponent.hpp:104
bool operator<(const Controller &aController) const
Definition WsfUCI_PartComponent.hpp:89
bool operator==(const Controller &aController) const
Definition WsfUCI_PartComponent.hpp:98
Controller(const std::string &aSystemID, const std::string &aServiceID)
Definition WsfUCI_PartComponent.hpp:84