10#include "RMMInformations.h"
11#include "RMMOutputQueues.h"
13#include "RMMRegisterAccess.h"
15#include "RMMSideChannels.h"
16#include "RMMUDPCore.h"
18using json = nlohmann::json;
39 RMMAPI(
const std::string &serverIP,
int serverPort,
const char *configFile);
52 void loadConfig(
const std::string &cfgJsonPath);
68 rmmStatus
checkRings(std::vector<int> &failedRings);
76 rmmStatus
getFirmwareInfo(std::unordered_map<std::string, std::string> *info);
79 rmmStatus
config(TimingMode timingMode = TimingMode::LCL, BringUpMode = BringUpMode::CONCURRENT,
80 uint32_t eventCode = 0x10);
83 rmmStatus
arpStatus(
const int index, std::unordered_map<std::string, int> *status);
137 RMMResult regRead(
const std::string ®Name, RegisterTag tag = RegisterTag::ALL);
139 RMMResult regWrite(
const std::string ®Name, uint32_t data, RegisterTag tag = RegisterTag::ALL);
141 RMMResult fieldRead(
const std::string ®, RegisterTag tag,
int bitBegin,
int bitWidth);
143 RMMResult fieldWrite(
const std::string ®, RegisterTag tag,
int bitBegin,
int bitWidth, uint32_t data);
182 bool hasSideChannel =
false;
185 std::vector<DetectorConfig> detConfigs;
186 std::mutex configRingMutex_;
187 int configRunningRingId_ = -1;
rmmStatus checkRing(RingId ring)
Perform a slow control read from all FEs in the ring.
Definition RMMApi.cpp:280
rmmStatus getLogMsg(std::string *msg, LogTopic topic=LogTopic::RMM_API)
Retrieves the latest log message for the specified log topic.
Definition RMMApi.cpp:841
rmmStatus getSideChannelStats(SideChannelStatsData &stats)
Retrieves statistics for the side channels.
Definition RMMApi.cpp:217
RMMResult regWrite(const std::string ®Name, uint32_t data, RegisterTag tag=RegisterTag::ALL)
Writes a value to a named register.
Definition RMMApi.cpp:923
int getRingPollTimeout(RingId ringId)
Retrieves the current polling timeout value of a specific ring.
Definition RMMApi.cpp:893
rmmStatus disablePowerMonitoring()
Disables the internal state machine that reads out the power rail information.
Definition RMMApi.cpp:141
rmmStatus resetPacketCounters()
Reset all packet counters back to 0. Useful if the counters start saturating at 0xFFFF_FFFF.
Definition RMMApi.cpp:335
rmmStatus setWriteToFileAll(bool option, char mode='w')
Enables or disables writing to log files for all components *.
Definition RMMApi.cpp:818
rmmStatus fetchSideChannelData(const uint8_t sideChIdx, SideChannelsData &data)
Fetches and populates the data for a specific side channel.
Definition RMMApi.cpp:231
rmmStatus configOutputQueues()
Configures the output queues for data processing.
Definition RMMApi.cpp:285
rmmStatus configUDPCore()
Configure the UDP Core with the configuration storaged into udpCore struct.
Definition RMMApi.cpp:196
rmmStatus getUDPCoreData(UDPCoreData *result)
Retrieve the UDP core configuration data.
Definition RMMApi.cpp:376
LEMOImpedance
Enum class representing the possible impedance values for LEMO connectors.
Definition RMMApi.h:97
rmmStatus config(TimingMode timingMode=TimingMode::LCL, BringUpMode=BringUpMode::CONCURRENT, uint32_t eventCode=0x10)
Configures the RMM for operation.
Definition RMMApi.cpp:425
rmmStatus getRingLogMsg(std::string *msg, RingId ringId)
Retrieves the latest log message from a specific ring's internal logger.
Definition RMMApi.cpp:868
rmmStatus configFENs(RingId ringId)
Iterates through all Front-End Nodes (FENs) in a ring and triggers their configuration.
Definition RMMApi.cpp:555
bool isLegacyFW()
Checks if the FW version is legagy (Non UDP Core version).
Definition RMMApi.cpp:1010
RMMAPI(const std::string &serverIP, int serverPort, const char *configFile)
Constructs an RMMAPI object and initializes the system.
Definition RMMApi.cpp:18
LogTopic
Enum class representing the possible logging topics in the RMM.
Definition RMMApi.h:114
rmmStatus getTimingStatus(TimingStatus *time)
Get the status of the timestamping system (including the embedded EVR) in the RMM.
Definition RMMApi.cpp:296
void setAllLogTimeouts(int milliseconds)
Sets the log timeout for all components.
Definition RMMApi.cpp:722
void setPollTimeout(int value)
Sets the timeout for polling in seconds. Timeout starts counting after the polling exceeds initial es...
Definition RMMApi.cpp:888
rmmStatus getOutputQueuesData(const int ring, std::shared_ptr< OutputQueueBase > &result)
Retrieves the output queue data for a specific ring.
Definition RMMApi.cpp:366
rmmStatus arpStatus(const int index, std::unordered_map< std::string, int > *status)
Get the ARP status.
Definition RMMApi.cpp:356
json jsonConfigData
Stores the JSON configuration data.
Definition RMMApi.h:161
rmmStatus enablePowerMonitoring(int interval_ms)
Enables the internal state machine to start reading out the Voltage, Current, and Power of various po...
Definition RMMApi.cpp:151
void requestStop()
Requests to stop ongoing operations in the RMM system.
Definition RMMApi.cpp:876
std::vector< int > getActiveRings() const
Retrieves a list of indices for all currently active rings.
Definition RMMApi.cpp:1015
RMMRegisterAccess & getRMMRegAccess()
Provides access to the RMM register interface.
Definition RMMApi.h:50
rmmStatus getLEMOTermination(const uint8_t inLEMOIdx, LEMOImpedance &impedance)
Retrieves the termination impedance for a specified LEMO input.
Definition RMMApi.cpp:616
rmmStatus configAllFE()
Configures all front-end nodes in the topology.
Definition RMMApi.cpp:573
void loadConfig(const std::string &cfgJsonPath)
Loads the RMM configuration from a JSON file.
Definition RMMApi.cpp:78
const std::vector< DetectorConfig > & getDetectorConfigs() const
Retrieves the list of detector configurations.
Definition RMMApi.h:168
RMMLog rmmLog
Log handler for RMM API messages.
Definition RMMApi.h:155
void setRingPollTimeout(RingId ringId, int value)
Sets the polling timeout value for a specific ring.
Definition RMMApi.cpp:898
rmmStatus setRingLogMask(RingId ringId, int mask)
Set the log mask for a specific ring.
Definition RMMApi.cpp:713
double getTemperature()
Gets the temperature of the RMM FPGA.
Definition RMMApi.cpp:61
rmmStatus checkRings()
Perform a slow control read from all FEs to confirm rings are active.
Definition RMMApi.cpp:260
RMMResult regRead(const std::string ®Name, RegisterTag tag=RegisterTag::ALL)
Reads a register value by its name from the register map.
Definition RMMApi.cpp:903
rmmStatus tearDownRing(RingId ring, bool waitTime)
Teardown a specific ring of the RMM.
Definition RMMApi.cpp:170
void registerFrontEnd(RingId ringId, std::shared_ptr< FrontEndBase > frontend)
Registers a Front-End Node (FEN) to a specific ring.
Definition RMMApi.cpp:54
RMMResult fieldRead(const std::string ®, RegisterTag tag, int bitBegin, int bitWidth)
Reads a field from a register in the RMM space using a register name.
Definition RMMApi.cpp:946
void setAllFileWriteTimeouts(int milliseconds)
Sets the file write timeout for all components.
Definition RMMApi.cpp:737
rmmStatus configRing(RingId ringId)
Configures a specific ring and its associated nodes.
Definition RMMApi.cpp:508
rmmStatus setLogFilePathAll(std::string filePath, bool useName=false)
Sets the log file path for all components.
Definition RMMApi.cpp:760
rmmStatus bringup(RingId ringId)
Bringup a ring.
Definition RMMApi.cpp:180
rmmStatus getRegBankVersion(RegBankVersion *banks)
Gets the register bank version details for the different register banks.
Definition RMMApi.cpp:325
rmmStatus getPowerVoltageCurrent(float voltageTolerancePercent, PowerResultsMap *result)
Gets the power, voltage, and current for all INA226 sensors on the VCU118.
Definition RMMApi.cpp:385
rmmStatus setRingEnabled(RingId ringId, bool enable)
Sets the software-level enabled status for the specified ring.
Definition RMMApi.cpp:1020
rmmStatus bringUpAllRings()
Initializes and configures all active rings.
Definition RMMApi.cpp:238
rmmStatus getSideChannelPacketCounters(const uint8_t sideChIdx, uint32_t *value)
Retrieves the packet counter value for a specific side channel.
Definition RMMApi.cpp:224
rmmStatus tearDownAllRings()
Teardown all possible rings.
Definition RMMApi.cpp:161
void allLogRelays(std::string logLevel, FILE *out)
Relays log output to a specified file for all RMM components.
Definition RMMApi.cpp:644
rmmStatus getFirmwareInfo(std::unordered_map< std::string, std::string > *info)
Gets the firmware information, including FPGA DNA, git hash, and build time.
Definition RMMApi.cpp:315
int getPollTimeout()
Gets the timeout for polling in seconds.
Definition RMMApi.cpp:883
rmmStatus bringUpAllRingsInSequence()
Initializes and configures all active rings, one by one.
Definition RMMApi.cpp:249
RMMResult fieldWrite(const std::string ®, RegisterTag tag, int bitBegin, int bitWidth, uint32_t data)
Writes a field to a register in the RMM space using a register name.
Definition RMMApi.cpp:960
rmmStatus setLogMasks(int logMask, LogTopic topic=LogTopic::ALL)
Sets the log mask for the specified log topic.
Definition RMMApi.cpp:668
rmmStatus fillDetectorConfigFromJson(json &detectorConfig)
Fills the detector configuration from a JSON object.
Definition RMMApi.cpp:115
RingState getRingStatus(RingId ringId) const
Retrieves a snapshot of the current status for a specific ring.
Definition RMMApi.cpp:1025
rmmStatus getPacketCounters(PacketCountMap *packets)
Return the updated packet counters.. There are 2 types of counters, one set that counts the per-fibre...
Definition RMMApi.cpp:346
rmmStatus setLEMOTermination(const uint8_t inLEMOIdx, LEMOImpedance impedance)
Sets the termination impedance for a specified LEMO input. Each bit in the gpio_input_term value corr...
Definition RMMApi.cpp:595
rmmStatus setupAllClocks(TimingMode timingMode)
Setup all clocks and the timing system.
Definition RMMApi.cpp:185
rmmStatus getCurrentTiming(uint32_t *currentTime)
Get the current timestamping for RMM.
Definition RMMApi.cpp:306
rmmStatus configSideChannels()
Configures all side channels based on stored settings.
Definition RMMApi.cpp:207
Class to manage and configure timing and clock synchronization in the RMM system.
Definition RMMClocks.h:50
Class responsible for retrieving RMM firmware and register bank version info.
Definition RMMInformations.h:22
Class for managing and writing log messages to different log levels and files.
Definition RMMLog.h:52
Class for managing and configuring output queues.
Definition RMMOutputQueues.h:61
Class for managing power monitoring and temperature sensing on the RMM FPGA.
Definition RMMRails.h:28
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 rings.
Definition RMMRings.h:44
Class to manage the configuration and data handling of side channels.
Definition RMMSideChannels.h:53
Class to manage UDP core functionality including ARP configuration and data handling.
Definition RMMUDPCore.h:39
Type-safe wrapper for a Ring index. This class ensures that a ring index is valid and within the boun...
Definition RingId.h:10
Struct to hold the information about the detector configuration.
Definition RMMApi.h:24
std::string name
Name of the detector config.
Definition RMMApi.h:25
std::map< uint8_t, uint8_t > ringTopology
Map to store ring index and number of nodes.
Definition RMMApi.h:26
Struct to represent the result of an RMM register operation.
Definition RMMRegisterAccess.h:37
Struct to store register bank version information.
Definition RMMInformations.h:9
Represents the current operational status and topology information of a ring.
Definition RMMRing.h:27
Struct to hold parameters that define how side channels generate and format data.
Definition RMMSideChannels.h:14
Struct to hold timing-related information and status for the RMM.
Definition RMMClocks.h:17
Struct to hold data related to the UDP core.
Definition RMMUDPCore.h:23