10#include <unordered_map>
13#include "RMMRegisterAccess.h"
15#include "RMMRingTimestamps.h"
35using PacketCountMap = std::map<uint8_t, PacketCountsData>;
59 ringStatus
checkRings(std::vector<int> &failedRings);
92 static constexpr int BUCKET_SIZE = 7;
94 std::array<uint32_t, RingId::MAX_NUM_RINGS> pollTimeouts_{};
95 std::atomic<uint32_t> pollTimeout_{10};
97 RMMRegisterAccess &RMMRegs;
98 std::mutex beStateMutex_;
100 std::atomic<bool> _stopRequested{
false};
102 void setDomXcvr(DomFiber val);
104 bool isInitialConfigDone();
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
Classe to manage the setup, configuration, and teardown of RMM ring.
Definition RMMRing.h:36
rmmStatus bringup(RingId ringId)
Bringup a ring.
Definition RMMRings.cpp:182
int getPollTimeout()
Gets the timeout for polling in seconds.
Definition RMMRings.cpp:429
static constexpr int FE_DEFAULT_LOCK_TIME
Seconds typical for a FE jitter cleaner to lock to 95BC.
Definition RMMRings.h:69
RMMRings(RMMRegisterAccess &RMMRegs)
Constructor for the RMMRings instance.
Definition RMMRings.cpp:5
std::vector< int > getActiveRings() const
Retrieves a list of indices for all currently active rings.
Definition RMMRings.cpp:36
rmmStatus getPacketCounters(PacketCountMap *packets)
Return the updated packet counters.. There are 2 types of counters, one set that counts the per-fibre...
Definition RMMRings.cpp:355
void configureAllNodesInRing(RingId ringId)
Iterates through all Front-End Nodes (FENs) in a ring and triggers their configuration.
Definition RMMRings.cpp:466
rmmStatus getRingLogMsg(std::string *msg, RingId ringId)
Retrieves the latest log message from a specific ring's internal logger.
Definition RMMRings.cpp:480
RingState getRingStatus(RingId ringId) const
Retrieves a snapshot of the current status for a specific ring.
Definition RMMRings.cpp:90
rmmStatus getSideChannelPacketCounter(uint8_t node, uint32_t *value)
Retrieves the packet counter value for a specific side channel.
Definition RMMRings.cpp:409
void resetPacketCounters()
Reset all packet counters back to 0. Useful if the counters start saturating at 0xFFFF_FFFF.
Definition RMMRings.cpp:337
rmmStatus teardownAllRings()
Teardown all possible rings.
Definition RMMRings.cpp:142
void setPollTimeout(int value)
Sets the timeout for polling in seconds. Timeout starts counting after the polling exceeds initial es...
Definition RMMRings.cpp:437
void addFrontEndToRing(RingId ringId, std::shared_ptr< FrontEndBase > frontend)
Registers a Front-End Node (FEN) to a specific ring.
Definition RMMRings.cpp:23
void bringUpAllRings()
Initializes and configures all active rings.
Definition RMMRings.cpp:198
void bringUpAllRingsInSequence()
Initializes and configures all active rings, one by one.
Definition RMMRings.cpp:226
bool isRingActive(RingId ringId)
Checks if a specific ring is initialized and operational.
Definition RMMRings.cpp:68
void setRingPollTimeout(RingId ringId, int value)
Sets the polling timeout value for a specific ring.
Definition RMMRings.cpp:448
rmmStatus setRingEnabled(RingId ringId, bool enable)
Sets the software-level enabled status for the specified ring.
Definition RMMRings.cpp:79
ringStatus checkRing(RingId ringId)
Perform a slow control read from all FEs in the ring.
Definition RMMRings.cpp:297
RMMLog rmmLog
Log handler for RMMRings messages.
Definition RMMRings.h:68
rmmStatus setRingLogMask(RingId ringId, int mask)
Set the log mask for a specific ring.
Definition RMMRings.cpp:103
ringStatus checkRings()
Perform a slow control read from all FEs to confirm rings are active.
Definition RMMRings.cpp:303
RMMRing & getRing(RingId ringId)
Provides direct access to a specific RMMRing object.
Definition RMMRings.cpp:60
rmmStatus startBulkData()
Inform all FEs in the topology that they can start sending bulk data.
Definition RMMRings.cpp:485
void initialConfig()
Executes the initial RMM setup ready to bring up the rings.
Definition RMMRings.cpp:264
rmmStatus tearDownRing(RingId ringId, bool waitTime=true)
Teardown a specific ring of the RMM.
Definition RMMRings.cpp:132
uint32_t getNumberOfNodes(RingId ringId)
Retrieves the total number of Front-End Nodes registered in this ring.
Definition RMMRings.cpp:50
int getRingPollTimeout(RingId ringId)
Retrieves the current polling timeout value of a specific ring.
Definition RMMRings.cpp:456
rmmStatus startRingBulkData(RingId ringId)
Inform all FEs in the ring that they can start sending bulk data.
Definition RMMRings.cpp:502
Type-safe wrapper for a Ring index. This class ensures that a ring index is valid and within the boun...
Definition RingId.h:10
static constexpr std::size_t MAX_NUM_RINGS
Maximum number of rings supported by the RMM system.
Definition RingId.h:15
Struct to hold the packet count statistics for a ring or node. This structure stores packet counters,...
Definition RMMRings.h:23
uint32_t oddOverflow
Overflow count for odd packets.
Definition RMMRings.h:26
uint32_t oddCount
Count of odd bulk data packets.
Definition RMMRings.h:24
std::map< int, uint32_t > perNode
Per-node packet counters.
Definition RMMRings.h:28
uint32_t evenOverflow
Overflow count for even packets.
Definition RMMRings.h:27
uint32_t evenCount
Count of even bulk data packets.
Definition RMMRings.h:25
Represents the current operational status and topology information of a ring.
Definition RMMRing.h:27