9#include <unordered_map>
12#include "OptionalLock.h"
13#include "RMMRegisterAccess.h"
14#include "RMMRingTimestamps.h"
17constexpr int FE_WATCHDOG_TIMEOUT = 30;
18constexpr int STATUS_UPDATE_GAP = 1;
19constexpr int MAX_NUMBER_NODES = 16;
21enum class FSMState { IDLE = 0, SYNC = 1, SLOW_CTRL = 2 };
49 void addEntry(std::shared_ptr<FrontEndBase> fen);
52 rmmStatus
tearDown(
bool waitTime =
true);
75 std::mutex* beStateMutex_;
77 std::mutex teardownMutex_;
78 std::mutex fensMutex_;
80 std::vector<std::shared_ptr<FrontEndBase>> fens_;
82 std::atomic<bool> enabled_{
true};
84 static constexpr int TS_NODE_STATUS_ATTEMPTING_LOCK = 1;
85 static constexpr int TS_NODE_STATUS_LOCKED = 2;
86 static constexpr int NODEID_ON_RESET = 31;
88 RMMResult maskedSetXcvrEngineState(std::string txrx, FSMState fsm_st,
bool use_dom_xcvr =
true);
89 std::string get3regSuffix();
90 int getXcvrNum(
bool use_dom_xcvr);
91 void updateTouchScreen(
int currentNode,
int lockStatus,
bool ringComplete);
93 rmmStatus setupNode(
int node);
94 rmmStatus finalSetup(
int finalNodeId);
95 void finalEnterSlowCtrl();
96 void beginNodeSync(
bool useDomXcvr);
97 RMMResult pollForLock(
int node,
bool useDomXcvr =
true);
98 void enterSlowCtrl(
bool useDomXcvr =
true);
100 std::atomic<int> poll_timeout{10};
101 bool inTopology()
const;
103 friend class FrontEndBase;
Base class for frontend devices, providing common functionality.
Definition FrontEndBase.h:18
Class for managing and writing log messages to different log levels and files.
Definition RMMLog.h:52
Class to handle register access over the ESS Readout Master Module.
Definition RMMRegisterAccess.h:57
void setPollTimeout(int value)
Sets the timeout for polling in seconds. Timeout starts counting after the polling exceeds initial es...
Definition RMMRing.cpp:447
rmmStatus setEnabled(bool enable)
Sets the software-level enabled status of the ring.
Definition RMMRing.cpp:71
RMMLog log_
Log handler for RMMRing messages.
Definition RMMRing.h:68
FrontEndBase * getFEN(int node)
Retrieves a pointer to a specific Front-End Node by its index.
Definition RMMRing.cpp:44
ringStatus check()
Check whether the ring is correctly locked.
Definition RMMRing.cpp:99
rmmStatus tearDown(bool waitTime=true)
Teardown a specific ring.
Definition RMMRing.cpp:126
void addEntry(std::shared_ptr< FrontEndBase > fen)
Adds a Front-End Node (FEN) entry to the ring's topology.
Definition RMMRing.cpp:19
rmmStatus startSendingBulkData()
Inform all FEs in the ring that they can start sending bulk data.
Definition RMMRing.cpp:452
int getPollTimeout()
Gets the timeout for polling in seconds.
Definition RMMRing.cpp:439
bool isOperational() const
Check the ring's operational status.
Definition RMMRing.h:64
void setLogMask(int mask)
Set the log mask for this ring.
Definition RMMRing.cpp:88
uint32_t getNumberOfFENs() const
Retrieves the total number of Front-End Nodes registered in this ring.
Definition RMMRing.cpp:28
RingState getStatus() const
Retrieves the current state of the ring.
Definition RMMRing.cpp:57
RMMRing(uint32_t ringId, RMMRegisterAccess ®s, std::mutex *beMutex=nullptr)
Constructor for the RMMRing object.
Definition RMMRing.cpp:5
rmmStatus bringup()
Brings up a ring.
Definition RMMRing.cpp:226
Struct to represent the result of an RMM register operation.
Definition RMMRegisterAccess.h:37
Represents the current operational status and topology information of a ring.
Definition RMMRing.h:27
uint32_t nodeCount
Definition RMMRing.h:30
bool enabled
Definition RMMRing.h:28
bool inTopology
Definition RMMRing.h:29