99#include < string>
1010
1111namespace DsVeosCoSim {
12-
1312// NOLINTBEGIN
1413#define ENUM_BITMASK_OPS (TEnum ) \
1514 constexpr TEnum operator &(TEnum lhs, TEnum rhs) { \
@@ -63,6 +62,7 @@ namespace DsVeosCoSim {
6362constexpr uint32_t CanMessageMaxLength = 64U ;
6463constexpr uint32_t EthMessageMaxLength = 9018U ;
6564constexpr uint32_t LinMessageMaxLength = 8U ;
65+ constexpr uint32_t FrMessageMaxLength = 254U ;
6666constexpr uint32_t EthAddressLength = 6U ;
6767
6868enum class Severity : uint32_t ;
@@ -78,21 +78,26 @@ struct EthMessageContainer;
7878struct LinController ;
7979struct LinMessage ;
8080struct LinMessageContainer ;
81+ struct FrController ;
82+ struct FrMessage ;
83+ struct FrMessageContainer ;
8184
8285using SimulationTime = std::chrono::nanoseconds;
8386using LogCallback = std::function<void (Severity, const std::string&)>;
8487
8588using SimulationCallback = std::function<void (SimulationTime simulationTime)>;
8689using SimulationTerminatedCallback =
87- std::function<void (SimulationTime simulationTime, TerminateReason terminateReason)>;
90+ std::function<void (SimulationTime simulationTime, TerminateReason terminateReason)>;
8891using IncomingSignalChangedCallback =
89- std::function<void (SimulationTime simulationTime, const IoSignal& signal, uint32_t length, const void * value)>;
92+ std::function<void (SimulationTime simulationTime, const IoSignal& signal, uint32_t length, const void * value)>;
9093using CanMessageReceivedCallback = std::function<
9194 void (SimulationTime simulationTime, const CanController& canController, const CanMessage& canMessage)>;
9295using EthMessageReceivedCallback = std::function<
9396 void (SimulationTime simulationTime, const EthController& ethController, const EthMessage& ethMessage)>;
9497using LinMessageReceivedCallback = std::function<
9598 void (SimulationTime simulationTime, const LinController& linController, const LinMessage& linMessage)>;
99+ using FrMessageReceivedCallback = std::function<
100+ void (SimulationTime simulationTime, const FrController& linController, const FrMessage& frMessage)>;
96101using CanMessageContainerReceivedCallback = std::function<void (SimulationTime simulationTime,
97102 const CanController& canController,
98103 const CanMessageContainer& canMessageContainer)>;
@@ -102,6 +107,9 @@ using EthMessageContainerReceivedCallback = std::function<void(SimulationTime si
102107using LinMessageContainerReceivedCallback = std::function<void (SimulationTime simulationTime,
103108 const LinController& linController,
104109 const LinMessageContainer& linMessageContainer)>;
110+ using FrMessageContainerReceivedCallback = std::function<void (SimulationTime simulationTime,
111+ const FrController& frController,
112+ const FrMessageContainer& frMessageContainer)>;
105113
106114enum class Result : uint32_t {
107115 Ok,
@@ -225,6 +233,19 @@ enum class LinMessageFlags : uint32_t {
225233 NoResponse = 2048
226234};
227235
236+ enum class FrMessageFlags : uint32_t {
237+ Loopback = 1 ,
238+ Error = 2 ,
239+ Drop = 4 ,
240+ Startup = 8 ,
241+ SyncFrame = 16 ,
242+ NullFrame = 32 ,
243+ PayloadPreamble = 64 ,
244+ TransferOnce = 128 ,
245+ ChannelA = 256 ,
246+ ChannelB = 512 ,
247+ };
248+
228249enum class FrameKind : uint32_t {
229250 Ok = 1 ,
230251 Error,
@@ -262,9 +283,11 @@ struct Callbacks {
262283 CanMessageReceivedCallback canMessageReceivedCallback;
263284 LinMessageReceivedCallback linMessageReceivedCallback;
264285 EthMessageReceivedCallback ethMessageReceivedCallback;
286+ FrMessageReceivedCallback frMessageReceivedCallback;
265287 CanMessageContainerReceivedCallback canMessageContainerReceivedCallback;
266288 LinMessageContainerReceivedCallback linMessageContainerReceivedCallback;
267289 EthMessageContainerReceivedCallback ethMessageContainerReceivedCallback;
290+ FrMessageContainerReceivedCallback frMessageContainerReceivedCallback;
268291};
269292
270293struct ConnectConfig {
@@ -451,9 +474,59 @@ struct LinMessageContainer {
451474 void WriteTo (LinMessage& linMessage) const ;
452475};
453476
477+ struct FrController {
478+ BusControllerId id{};
479+ uint32_t queueSize{};
480+ uint64_t bitsPerSecond{};
481+ const char * name{};
482+ const char * channelName{};
483+ const char * clusterName{};
484+ [[nodiscard]] std::string ToString () const ;
485+ };
486+
487+ struct FrControllerContainer {
488+ BusControllerId id{};
489+ uint32_t queueSize{};
490+ uint64_t bitsPerSecond{};
491+ std::string name;
492+ std::string channelName;
493+ std::string clusterName;
494+
495+ [[nodiscard]] std::string ToString () const ;
496+ [[nodiscard]] FrController Convert () const ;
497+ };
498+
499+ struct FrMessage {
500+ SimulationTime timestamp{};
501+ BusControllerId controllerId{};
502+ BusMessageId id{};
503+ FrMessageFlags flags{};
504+ uint32_t length{};
505+ const uint8_t * data{};
506+
507+ [[nodiscard]] std::string ToString () const ;
508+ [[nodiscard]] Result Check () const ;
509+ void WriteTo (FrMessageContainer& frMessageContainer) const ;
510+ };
511+
512+ struct FrMessageContainer {
513+ SimulationTime timestamp{};
514+ BusControllerId controllerId{};
515+ uint32_t reserved{};
516+ BusMessageId id{};
517+ FrMessageFlags flags{};
518+ uint32_t length{};
519+ std::array<uint8_t , FrMessageMaxLength> data{};
520+
521+ [[nodiscard]] std::string ToString () const ;
522+ [[nodiscard]] Result Check () const ;
523+ void WriteTo (FrMessage& frMessage) const ;
524+ };
525+
454526ENUM_BITMASK_OPS (CanMessageFlags);
455527ENUM_BITMASK_OPS (EthMessageFlags);
456528ENUM_BITMASK_OPS (LinMessageFlags);
529+ ENUM_BITMASK_OPS (FrMessageFlags);
457530
458531[[nodiscard]] std::string ToString (SimulationTime simulationTime);
459532[[nodiscard]] const char * ToString (Result result);
@@ -474,12 +547,16 @@ ENUM_BITMASK_OPS(LinMessageFlags);
474547[[nodiscard]] std::string ToString (CanMessageFlags canMessageFlags);
475548[[nodiscard]] std::string ToString (EthMessageFlags ethMessageFlags);
476549[[nodiscard]] std::string ToString (LinMessageFlags linMessageFlags);
550+ [[nodiscard]] std::string ToString (FrMessageFlags frMessageFlags);
477551[[nodiscard]] const char * ToString (FrameKind frameKind);
478552
553+
479554[[nodiscard]] std::string ToString (const std::vector<IoSignalContainer>& ioSignalContainers);
480555[[nodiscard]] std::string ToString (const std::vector<CanControllerContainer>& canControllerContainers);
481556[[nodiscard]] std::string ToString (const std::vector<EthControllerContainer>& ethControllerContainers);
482- [[nodiscard]] std::string ToString (const std::vector<LinControllerContainer>& linControllerContainers);
557+ [[nodiscard]] std::string ToString (const std::vector<LinControllerContainer>& linControllerContainers);;
558+ [[nodiscard]] std::string ToString (const std::vector<FrControllerContainer>& frControllerContainers);
559+
483560
484561std::ostream& operator <<(std::ostream& stream, SimulationTime simulationTime);
485562std::ostream& operator <<(std::ostream& stream, Result result);
@@ -500,6 +577,8 @@ std::ostream& operator<<(std::ostream& stream, LinControllerType linControllerTy
500577std::ostream& operator <<(std::ostream& stream, CanMessageFlags canMessageFlags);
501578std::ostream& operator <<(std::ostream& stream, EthMessageFlags ethMessageFlags);
502579std::ostream& operator <<(std::ostream& stream, LinMessageFlags linMessageFlags);
580+ std::ostream& operator <<(std::ostream& stream, FrMessageFlags frMessageFlags);
581+
503582std::ostream& operator <<(std::ostream& stream, FrameKind frameKind);
504583
505584std::ostream& operator <<(std::ostream& stream, const IoSignal& ioSignal);
@@ -513,14 +592,20 @@ std::ostream& operator<<(std::ostream& stream, const EthControllerContainer& eth
513592std::ostream& operator <<(std::ostream& stream, const EthMessage& ethMessage);
514593std::ostream& operator <<(std::ostream& stream, const EthMessageContainer& ethMessageContainer);
515594std::ostream& operator <<(std::ostream& stream, const LinController& linController);
516- std::ostream& operator <<(std::ostream& stream, const LinControllerContainer& linControllerContainer );
595+ std::ostream& operator <<(std::ostream& stream, const LinControllerContainer& frControllerContainer );
517596std::ostream& operator <<(std::ostream& stream, const LinMessage& linMessage);
518597std::ostream& operator <<(std::ostream& stream, const LinMessageContainer& linMessageContainer);
598+ std::ostream& operator <<(std::ostream& stream, const FrController& frController);
599+ std::ostream& operator <<(std::ostream& stream, const FrControllerContainer& frControllerContainer);
600+ std::ostream& operator <<(std::ostream& stream, const FrMessage& frMessage);
601+ std::ostream& operator <<(std::ostream& stream, const FrMessageContainer& frMessageContainer);
519602
520603std::ostream& operator <<(std::ostream& stream, const std::vector<IoSignalContainer>& ioSignalContainers);
521604std::ostream& operator <<(std::ostream& stream, const std::vector<CanControllerContainer>& canControllerContainers);
522605std::ostream& operator <<(std::ostream& stream, const std::vector<EthControllerContainer>& ethControllerContainers);
523606std::ostream& operator <<(std::ostream& stream, const std::vector<LinControllerContainer>& linControllerContainers);
607+ std::ostream& operator <<(std::ostream& stream, const std::vector<FrControllerContainer>& frControllerContainers);
608+
524609
525610[[nodiscard]] bool operator ==(const IoSignal& first, const IoSignal& second);
526611[[nodiscard]] bool operator ==(const IoSignalContainer& first, const IoSignalContainer& second);
@@ -536,11 +621,17 @@ std::ostream& operator<<(std::ostream& stream, const std::vector<LinControllerCo
536621[[nodiscard]] bool operator ==(const LinControllerContainer& first, const LinControllerContainer& second);
537622[[nodiscard]] bool operator ==(const LinMessage& first, const LinMessage& second);
538623[[nodiscard]] bool operator ==(const LinMessageContainer& first, const LinMessageContainer& second);
624+ [[nodiscard]] bool operator ==(const FrController& first, const FrController& second);
625+ [[nodiscard]] bool operator ==(const FrControllerContainer& first, const FrControllerContainer& second);
626+ [[nodiscard]] bool operator ==(const FrMessage& first, const FrMessage& second);
627+ [[nodiscard]] bool operator ==(const FrMessageContainer& first, const FrMessageContainer& second);
539628
540629[[nodiscard]] std::vector<IoSignal> Convert (const std::vector<IoSignalContainer>& ioSignalContainers);
541630[[nodiscard]] std::vector<CanController> Convert (const std::vector<CanControllerContainer>& canControllerContainers);
542631[[nodiscard]] std::vector<EthController> Convert (const std::vector<EthControllerContainer>& ethControllerContainers);
543632[[nodiscard]] std::vector<LinController> Convert (const std::vector<LinControllerContainer>& linControllerContainers);
633+ [[nodiscard]] std::vector<FrController> Convert (const std::vector<FrControllerContainer>& frControllerContainers);
634+
544635
545636[[nodiscard]] size_t GetDataTypeSize (DataType dataType);
546637
@@ -549,5 +640,4 @@ std::ostream& operator<<(std::ostream& stream, const std::vector<LinControllerCo
549640[[nodiscard]] std::string DataToString (const uint8_t * data, size_t dataLength, char separator);
550641
551642void SetLogCallback (LogCallback logCallback);
552-
553- } // namespace DsVeosCoSim
643+ } // namespace DsVeosCoSim
0 commit comments