12#ifndef WSFUCI_SENSORCOMPONENT_HPP
13#define WSFUCI_SENSORCOMPONENT_HPP
15#include "wsf_oms_uci_export.h"
20#include "uci/base/Accessor.h"
21#include "uci/type/EntityMDT.h"
22#include "uci/base/UUID.h"
23#include "uci/factory/CapabilityID_TypeFactory.h"
24#include "uci/type/ActivityStateEnum.h"
25#include "uci/type/ApprovalEnum.h"
26#include "uci/type/MessageStateEnum.h"
27#include "uci/type/DateTimeType.h"
28#include "uci/type/KinematicsType.h"
30#include "UtCallbackHolder.hpp"
53class UCI_ControlRequestMessage;
60 size_t aPlatformIndex,
61 size_t aLowestModeIndex)
63 , mSensorPtr(aSensorPtr)
64 , mPlatformIndex(aPlatformIndex)
65 , mLowestModeIndex(aLowestModeIndex) {}
73 size_t mPlatformIndex;
74 size_t mLowestModeIndex;
107 const std::string& aRemark)
155 template<
typename CapabilityType,
156 typename CapabilityStatusType>
158 CapabilityStatusType& aStatusType,
159 const size_t& aIndex)
164 auto modeName =
mSensorPtr->GetModeName(aIndex);
167 bool defaultSet{
false };
173 if (uuid.second == 0)
176 capabilityUUID = uuid.first;
183 capabilityUUID = it->second;
185 aCapabilityType.Get().getCapabilityID().getUUID().setValue(capabilityUUID);
186 aCapabilityType.Get().getCapabilityID().setDescriptiveLabel(label);
187 mSubsystemStatusMessagePtr->Get().getMessageData().getConfiguration().getCapabilityID().push_back(aCapabilityType.Get().getCapabilityID());
192 controlInterfaceEnum.Get().setValue(uci::type::CapabilityControlInterfacesEnum::UCI_AUTO_MDF);
196 controlInterfaceEnum.Get().setValue(uci::type::CapabilityControlInterfacesEnum::UCI_CAPABILITY_COMMAND);
198 aCapabilityType.Get().getAcceptedInterface().push_back(controlInterfaceEnum.Get());
200 aStatusType.Get().setCapabilityID(aCapabilityType.Get().getCapabilityID());
201 aStatusType.Get().getAvailabilityInfo().setAvailability(uci::type::CapabilityAvailabilityEnum::UCI_AVAILABLE);
204 capabilityControl.Get().setCapabilityID(aCapabilityType.Get().getCapabilityID());
205 capabilityControl.Get().getAcceptedInterface().push_back(controlInterfaceEnum.Get());
206 capabilityControl.Get().enablePrimaryController();
207 auto& primaryController = capabilityControl.Get().getPrimaryController();
210 primaryController.getServiceID().setUUID(serviceID);
211 primaryController.getSystemID().setUUID(systemID);
212 primaryController.getSystemID().setDescriptiveLabel(
GetInterface()->GetConnection()->getMySystemLabel());
214 mControlStatusMessagePtr->Get().getMessageData().getControlType().getCapabilityControl().push_back(capabilityControl.Get());
216 catch (
const uci::base::UCIException& ex)
218 ut::log::error() << ex.what() <<
":" << ex.getErrorCode();
222 template <
typename CommandStatusMessage,
225 const uci::type::MessageStateEnum::EnumerationItem& aMessageState,
226 const CommandID& aCommandID)
233 ownPro.Get().setValue(ismownpro::type::CVEnumISMOwnerProducerValues::ISMOWNPRO_USA);
234 msg.Get().getSecurityAttributesGroup().getOwnerProducer().push_back(ownPro.Get());
236 msg.Get().setMessageState(aMessageState);
237 auto& data = msg.Get().getMessageData();
238 data.setCommandID(aCommandID);
243 catch (
const uci::base::UCIException& ex)
245 ut::log::error() << ex.what() <<
":" << ex.getErrorCode();
250 const uci::type::ControlRequestID_Type& aRequestID);
253 const uci::type::MessageStateEnum::EnumerationItem& aMessageState);
257 const uci::type::MessageStateEnum::EnumerationItem& aMessageState,
258 const uci::type::EntitySourceEnum::EnumerationItem& aSourceType);
262 template <
typename CapabilityStatusMessage>
267 auto& data = aMessagePtr->Get().getMessageData();
268 for (
size_t i = 0; i < data.getCapabilityStatus().size(); ++i)
270 auto availability = uci::type::CapabilityAvailabilityEnum::UCI_AVAILABLE;
271 auto& currentAvailability = data.getCapabilityStatus().at(i).getAvailabilityInfo().getAvailability();
273 currentAvailability == uci::type::CapabilityAvailabilityEnum::UCI_DISABLED)
275 availability = uci::type::CapabilityAvailabilityEnum::UCI_DISABLED;
277 data.getCapabilityStatus().at(i).getAvailabilityInfo().setAvailability(availability);
280 catch (
const uci::base::UCIException& ex)
282 ut::log::error() << ex.what() <<
":" << ex.getErrorCode();
286 template <
typename CapabilityStatusMessage>
288 const size_t aIndex)
const
290 auto availability = uci::type::CapabilityAvailabilityEnum::UCI_AVAILABLE;
291 auto& currentAvailability = aMessagePtr->Get().getMessageData().getCapabilityStatus().at(aIndex).getAvailabilityInfo().getAvailability();
293 currentAvailability == uci::type::CapabilityAvailabilityEnum::UCI_DISABLED)
295 availability = uci::type::CapabilityAvailabilityEnum::UCI_DISABLED;
300 template<
typename ActivityMessage>
302 ActivityMessage* aMessagePtr)
307 auto& activity = aMessagePtr->Get().getMessageData().getActivity();
308 auto& lastActivity = activity.at(activity.size() - 1);
309 lastActivity.setActivityState(uci::type::ActivityStateEnum::UCI_COMPLETED);
312 double eventTime{ aSimTime +
mSensorPtr->GetCurrentMode()->GetFrameTime() };
313 size_t platformIndex{
mSensorPtr->GetPlatform()->GetIndex() };
314 auto resetModeEvent = ut::make_unique<UCI_SetDefaultModeEvent>(
mSensorPtr,
329 const std::string& aCapabilityUUID);
344 UCI_EntityID_Type& aEntityID);
347 UCI_SignalID_Type& aSignalID);
350 virtual uci::type::ActivityStateEnum::EnumerationItem GetActivityState()
const;
352 std::map<WsfTrackId, UCI_EntityID_Type> mTrackToEntityIdMap;
353 std::map<std::string, UCI_SignalID_Type> mSignalIdMap;
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
@ cSLEW_FIXED
Definition WsfArticulatedPart.hpp:45
ParentType * GetComponentParent() const
Definition WsfComponent.hpp:154
EventDisposition
Definition WsfEvent.hpp:37
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorMode.hpp:36
Definition WsfSensor.hpp:92
The main controller for a simulation.
Definition WsfSimulation.hpp:109
virtual void AddEvent(std::unique_ptr< WsfEvent > aEventPtr)
Definition WsfSimulation.cpp:162
Definition WsfSingleSensorObserver.hpp:33
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
WsfSimulation & GetSimulation() const
Convenience Methods.
Definition WsfUCI_Component.hpp:92
bool CanHandleMessage() const
Definition WsfUCI_Component.hpp:95
UCI_Interface * GetInterface()
Definition WsfUCI_Component.cpp:59
uci::base::AbstractServiceBusConnection * GetConnection() const
Return the abstract service bus connection object.
Definition WsfUCI_Interface.hpp:149
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
std::unique_ptr< UCI_SubsystemStatusMessage > mSubsystemStatusMessagePtr
Definition WsfUCI_PartComponent.hpp:237
uci::type::CommandStateEnum::EnumerationItem mCommandState
Definition WsfUCI_PartComponent.hpp:243
bool mIsCommanded
Definition WsfUCI_PartComponent.hpp:246
double mUpdateMessageTime
Definition WsfUCI_PartComponent.hpp:241
std::map< std::string, Controller > mPrimaryController
Definition WsfUCI_PartComponent.hpp:250
UCI_PartComponent()=delete
virtual void PrintMessageSent(double aSimTime, const std::string &aMessageType)
Definition WsfUCI_PartComponent.cpp:850
std::string mRemarks
Definition WsfUCI_PartComponent.hpp:244
Definition WsfUCI_SensorComponent.hpp:82
virtual void ClearActivities()=0
WsfSensor * mSensorPtr
Definition WsfUCI_SensorComponent.hpp:335
int mClass
Definition WsfUCI_SensorComponent.hpp:337
void SlewComplete(double aSimTime, ActivityMessage *aMessagePtr)
Definition WsfUCI_SensorComponent.hpp:301
WsfSensor * GetSensor() const
Definition WsfUCI_SensorComponent.hpp:118
void SendCommandStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState, const CommandID &aCommandID)
Definition WsfUCI_SensorComponent.hpp:224
virtual void OnSensorDeleting(WsfSensor *aSensorPtr) override
Called before the sensor is actually deleted.
Definition WsfUCI_SensorComponent.cpp:517
std::map< std::string, size_t > mUUID_ToModeIndex
Definition WsfUCI_SensorComponent.hpp:338
void SetUpdateMessageTime(double aUpdateTime)
Definition WsfUCI_SensorComponent.hpp:99
virtual void SendControlStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState)
Definition WsfUCI_SensorComponent.cpp:273
virtual void SetRejectedFixedMode(const std::string &aModeName, const std::string &aCapabilityUUID)
Definition WsfUCI_SensorComponent.cpp:639
const int * GetComponentRoles() const override
Definition WsfUCI_SensorComponent.cpp:98
virtual void OnSensorTurnedOn(double aSimTime, WsfSensor *aSensorPtr) override
Called just after the sensor is turned on.
Definition WsfUCI_SensorComponent.cpp:554
void SensorModeDeactivated(double aSimTime, WsfSensor *aSensorPtr, WsfSensorMode *aModePtr)
Definition WsfUCI_SensorComponent.cpp:589
void * QueryInterface(int aRole) override
Definition WsfUCI_SensorComponent.cpp:110
virtual void SetRejectedTypeUnavailable()
Definition WsfUCI_SensorComponent.cpp:667
virtual void OnSensorDeleted(WsfSensor *aSensorPtr) override
Called just before the sensor is removed from the simulation.
Definition WsfUCI_SensorComponent.cpp:521
bool ProcessInput(UtInput &aInput) override
Definition WsfUCI_SensorComponent.cpp:55
size_t mLowestAvailableCapability
Definition WsfUCI_SensorComponent.hpp:339
std::string mSensorName
Definition WsfUCI_SensorComponent.hpp:336
virtual void SetCommandAccepted(double aAz, double aEl)
Definition WsfUCI_SensorComponent.cpp:608
virtual void SetAllCapabilitiesAvailability(const uci::type::CapabilityAvailabilityEnum::EnumerationItem &aAvailability)=0
virtual void UpdateAllMessages() override
Definition WsfUCI_SensorComponent.cpp:235
void UpdateCapabilityStatusMessage(CapabilityStatusMessage *aMessagePtr)
Definition WsfUCI_SensorComponent.hpp:263
UCI_SensorComponent()=delete
uci::type::CommandStateEnum::EnumerationItem GetCommandState() const
Definition WsfUCI_SensorComponent.hpp:104
void SensorModeActivated(double aSimTime, WsfSensor *aSensorPtr, WsfSensorMode *aModePtr)
Definition WsfUCI_SensorComponent.cpp:574
virtual void OnSensorTurnedOff(double aSimTime, WsfSensor *aSensorPtr) override
Called just after the sensor is turned off.
Definition WsfUCI_SensorComponent.cpp:532
static const int cWSF_COMPONENT_UCI_SENSOR
Definition WsfUCI_SensorComponent.hpp:88
bool Initialize2(double aSimTime) override
Definition WsfUCI_SensorComponent.cpp:170
virtual ~UCI_SensorComponent()=default
double GetUpdateMessageTime() const
Definition WsfUCI_SensorComponent.hpp:100
virtual void SetRejectedOutOfLimits(double aAz, double aEl)
Definition WsfUCI_SensorComponent.cpp:622
uci::type::CapabilityAvailabilityEnum::EnumerationItem GetCapabilityAvailability(const CapabilityStatusMessage *aMessagePtr, const size_t aIndex) const
Definition WsfUCI_SensorComponent.hpp:287
void UpdateCommandResults(const uci::type::CommandStateEnum::EnumerationItem &aState, const std::string &aRemark)
Definition WsfUCI_SensorComponent.hpp:106
virtual void SendControlRequestStatusMessage(double aSimTime, const uci::type::ControlRequestID_Type &aRequestID)
Definition WsfUCI_SensorComponent.cpp:240
std::string GetRemarks() const
Definition WsfUCI_SensorComponent.hpp:103
bool Initialize(double aSimTime) override
Definition WsfUCI_SensorComponent.cpp:157
void ClearRemarks()
Definition WsfUCI_SensorComponent.hpp:102
void SendEntityMessage(double aSimTime, const WsfTrack &aTrack, const uci::type::MessageStateEnum::EnumerationItem &aMessageState, const uci::type::EntitySourceEnum::EnumerationItem &aSourceType)
Definition WsfUCI_SensorComponent.cpp:307
void SelectDefaultMode(double aSimTime)
Definition WsfUCI_SensorComponent.cpp:677
void Attach(WsfSensor &aSensor)
Definition WsfUCI_SensorComponent.cpp:195
const std::string & GetSensorName() const
Definition WsfUCI_SensorComponent.hpp:120
void Detach() override
Detaches the component observer from the sensor.
Definition WsfUCI_SensorComponent.cpp:218
void InitializeModeData(CapabilityType &aCapabilityType, CapabilityStatusType &aStatusType, const size_t &aIndex)
Definition WsfUCI_SensorComponent.hpp:157
virtual void OnSlewComplete(double aSimTime)
Definition WsfUCI_SensorComponent.hpp:132
bool PreInitialize(double aSimTime) override
Definition WsfUCI_SensorComponent.cpp:122
virtual void SetRejectedModeDisabled(const std::string &aModeName, const std::string &aCapabilityUUID)
Definition WsfUCI_SensorComponent.cpp:653
UCI_SetDefaultModeEvent(WsfSensor *aSensorPtr, double aSimTime, size_t aPlatformIndex, size_t aLowestModeIndex)
Definition WsfUCI_SensorComponent.hpp:58
~UCI_SetDefaultModeEvent() override=default
WsfEvent::EventDisposition Execute() override
Definition WsfUCI_SensorComponent.cpp:690
std::string RemoveAngleBrackets(const std::string &aString)
Definition WsfUCI_Utils.cpp:182
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfUCI_PartComponent.hpp:82