Skip to content

Commit bcd1bc0

Browse files
authored
Merge pull request #44 from dspace-group/feature/LeonD/addFlexraySupport
Add Flexray support do cosim client
2 parents e36fb61 + 3cc7ba3 commit bcd1bc0

31 files changed

+2615
-701
lines changed

include/DsVeosCoSim/CoSimClient.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55
#include <cstdint>
66
#include <memory>
77
#include <vector>
8-
98
#include "CoSimTypes.h"
109

10+
1111
namespace DsVeosCoSim {
1212

1313
class CoSimClient {
1414
protected:
1515
CoSimClient() = default;
16-
1716
public:
1817
virtual ~CoSimClient() = default;
1918

@@ -60,26 +59,35 @@ class CoSimClient {
6059
const EthController*& controllers) const = 0;
6160
[[nodiscard]] virtual Result GetLinControllers(uint32_t& controllersCount,
6261
const LinController*& controllers) const = 0;
62+
[[nodiscard]] virtual Result GetFrControllers(uint32_t& controllersCount,
63+
const FrController*& controllers) const = 0;
6364

6465
[[nodiscard]] virtual Result GetCanControllers(std::vector<CanController>& controllers) const = 0;
6566
[[nodiscard]] virtual Result GetEthControllers(std::vector<EthController>& controllers) const = 0;
6667
[[nodiscard]] virtual Result GetLinControllers(std::vector<LinController>& controllers) const = 0;
68+
[[nodiscard]] virtual Result GetFrControllers(std::vector<FrController>& controllers) const = 0;
6769

6870
[[nodiscard]] virtual Result Transmit(const CanMessage& message) const = 0;
6971
[[nodiscard]] virtual Result Transmit(const EthMessage& message) const = 0;
7072
[[nodiscard]] virtual Result Transmit(const LinMessage& message) const = 0;
73+
[[nodiscard]] virtual Result Transmit(const FrMessage& message) const = 0;
74+
75+
7176

7277
[[nodiscard]] virtual Result Transmit(const CanMessageContainer& messageContainer) const = 0;
7378
[[nodiscard]] virtual Result Transmit(const EthMessageContainer& messageContainer) const = 0;
7479
[[nodiscard]] virtual Result Transmit(const LinMessageContainer& messageContainer) const = 0;
80+
[[nodiscard]] virtual Result Transmit(const FrMessageContainer& messageContainer) const = 0;
7581

7682
[[nodiscard]] virtual Result Receive(CanMessage& message) const = 0;
7783
[[nodiscard]] virtual Result Receive(EthMessage& message) const = 0;
7884
[[nodiscard]] virtual Result Receive(LinMessage& message) const = 0;
85+
[[nodiscard]] virtual Result Receive(FrMessage& message) const = 0;
7986

8087
[[nodiscard]] virtual Result Receive(CanMessageContainer& messageContainer) const = 0;
8188
[[nodiscard]] virtual Result Receive(EthMessageContainer& messageContainer) const = 0;
8289
[[nodiscard]] virtual Result Receive(LinMessageContainer& messageContainer) const = 0;
90+
[[nodiscard]] virtual Result Receive(FrMessageContainer& messageContainer) const = 0;
8391
};
8492

8593
[[nodiscard]] Result CreateClient(std::unique_ptr<CoSimClient>& client);

include/DsVeosCoSim/CoSimServer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ struct CoSimServerConfig {
2626
SimulationCallback simulationContinuedCallback;
2727
CanMessageContainerReceivedCallback canMessageContainerReceivedCallback;
2828
LinMessageContainerReceivedCallback linMessageContainerReceivedCallback;
29+
FrMessageContainerReceivedCallback frMessageContainerReceivedCallback;
2930
EthMessageContainerReceivedCallback ethMessageContainerReceivedCallback;
3031
std::vector<IoSignalContainer> incomingSignals;
3132
std::vector<IoSignalContainer> outgoingSignals;
3233
std::vector<CanControllerContainer> canControllers;
3334
std::vector<EthControllerContainer> ethControllers;
3435
std::vector<LinControllerContainer> linControllers;
36+
std::vector<FrControllerContainer> frControllers;
3537
};
3638

3739
class CoSimServer {
@@ -67,10 +69,13 @@ class CoSimServer {
6769
[[nodiscard]] virtual Result Transmit(const CanMessage& message) const = 0;
6870
[[nodiscard]] virtual Result Transmit(const EthMessage& message) const = 0;
6971
[[nodiscard]] virtual Result Transmit(const LinMessage& message) const = 0;
72+
[[nodiscard]] virtual Result Transmit(const FrMessage& message) const = 0;
73+
7074

7175
[[nodiscard]] virtual Result Transmit(const CanMessageContainer& messageContainer) const = 0;
7276
[[nodiscard]] virtual Result Transmit(const EthMessageContainer& messageContainer) const = 0;
7377
[[nodiscard]] virtual Result Transmit(const LinMessageContainer& messageContainer) const = 0;
78+
[[nodiscard]] virtual Result Transmit(const FrMessageContainer& messageContainer) const = 0;
7479

7580
[[nodiscard]] virtual Result BackgroundService(std::chrono::nanoseconds& roundTripTime) = 0;
7681

include/DsVeosCoSim/CoSimTypes.h

Lines changed: 97 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <string>
1010

1111
namespace DsVeosCoSim {
12-
1312
// NOLINTBEGIN
1413
#define ENUM_BITMASK_OPS(TEnum) \
1514
constexpr TEnum operator&(TEnum lhs, TEnum rhs) { \
@@ -63,6 +62,7 @@ namespace DsVeosCoSim {
6362
constexpr uint32_t CanMessageMaxLength = 64U;
6463
constexpr uint32_t EthMessageMaxLength = 9018U;
6564
constexpr uint32_t LinMessageMaxLength = 8U;
65+
constexpr uint32_t FrMessageMaxLength = 254U;
6666
constexpr uint32_t EthAddressLength = 6U;
6767

6868
enum class Severity : uint32_t;
@@ -78,21 +78,26 @@ struct EthMessageContainer;
7878
struct LinController;
7979
struct LinMessage;
8080
struct LinMessageContainer;
81+
struct FrController;
82+
struct FrMessage;
83+
struct FrMessageContainer;
8184

8285
using SimulationTime = std::chrono::nanoseconds;
8386
using LogCallback = std::function<void(Severity, const std::string&)>;
8487

8588
using SimulationCallback = std::function<void(SimulationTime simulationTime)>;
8689
using SimulationTerminatedCallback =
87-
std::function<void(SimulationTime simulationTime, TerminateReason terminateReason)>;
90+
std::function<void(SimulationTime simulationTime, TerminateReason terminateReason)>;
8891
using 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)>;
9093
using CanMessageReceivedCallback = std::function<
9194
void(SimulationTime simulationTime, const CanController& canController, const CanMessage& canMessage)>;
9295
using EthMessageReceivedCallback = std::function<
9396
void(SimulationTime simulationTime, const EthController& ethController, const EthMessage& ethMessage)>;
9497
using 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)>;
96101
using 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
102107
using 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

106114
enum 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+
228249
enum 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

270293
struct 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+
454526
ENUM_BITMASK_OPS(CanMessageFlags);
455527
ENUM_BITMASK_OPS(EthMessageFlags);
456528
ENUM_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

484561
std::ostream& operator<<(std::ostream& stream, SimulationTime simulationTime);
485562
std::ostream& operator<<(std::ostream& stream, Result result);
@@ -500,6 +577,8 @@ std::ostream& operator<<(std::ostream& stream, LinControllerType linControllerTy
500577
std::ostream& operator<<(std::ostream& stream, CanMessageFlags canMessageFlags);
501578
std::ostream& operator<<(std::ostream& stream, EthMessageFlags ethMessageFlags);
502579
std::ostream& operator<<(std::ostream& stream, LinMessageFlags linMessageFlags);
580+
std::ostream& operator<<(std::ostream& stream, FrMessageFlags frMessageFlags);
581+
503582
std::ostream& operator<<(std::ostream& stream, FrameKind frameKind);
504583

505584
std::ostream& operator<<(std::ostream& stream, const IoSignal& ioSignal);
@@ -513,14 +592,20 @@ std::ostream& operator<<(std::ostream& stream, const EthControllerContainer& eth
513592
std::ostream& operator<<(std::ostream& stream, const EthMessage& ethMessage);
514593
std::ostream& operator<<(std::ostream& stream, const EthMessageContainer& ethMessageContainer);
515594
std::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);
517596
std::ostream& operator<<(std::ostream& stream, const LinMessage& linMessage);
518597
std::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

520603
std::ostream& operator<<(std::ostream& stream, const std::vector<IoSignalContainer>& ioSignalContainers);
521604
std::ostream& operator<<(std::ostream& stream, const std::vector<CanControllerContainer>& canControllerContainers);
522605
std::ostream& operator<<(std::ostream& stream, const std::vector<EthControllerContainer>& ethControllerContainers);
523606
std::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

551642
void SetLogCallback(LogCallback logCallback);
552-
553-
} // namespace DsVeosCoSim
643+
} // namespace DsVeosCoSim

0 commit comments

Comments
 (0)