20#include "RMMException.h"
28#define I2C_MUTEX_SCTL_ID 1
29#define I2C_MUTEX_IDLE_ID 0
77 std::unordered_map<RegisterTag, std::unordered_map<std::string, uint32_t>>
fillAllAddressMaps();
80 unsigned int addRegsMutexes(std::list<std::string> regs,
bool critic =
true);
81 bool addRegMutex(std::string reg, std::string tag =
"NoTag",
bool critic =
true);
82 RegLockGuard
regLockGuard(std::string reg, std::string tag =
"NoTag");
83 std::string
addrLookUp(
const std::string &name, RegisterTag tag = RegisterTag::ALL);
84 RMMResult feaFwRegRead(
const std::string ®_name,
int ring_id,
int node_id,
const std::string &tag =
"");
86 const std::string &tag =
"");
87 RMMResult regRead(
const std::string ®Name, RegisterTag tag = RegisterTag::ALL);
88 void regAssert(
const std::string ®_name, uint32_t exp_data, RegisterTag tag = RegisterTag::ALL);
89 RMMResult regWrite(
const std::string ®Name, uint32_t data, RegisterTag tag = RegisterTag::ALL);
90 rmmStatus
regPoll(
const std::string ®Name, uint32_t expData,
double pollDelay = 1.0, uint32_t timeout = 0,
91 RegisterTag regTag = RegisterTag::ALL, std::function<
bool(uint32_t)> stopCondition =
nullptr,
92 std::function<
bool()> checkStop =
nullptr);
93 RMMResult fieldRead(
const std::string ®, RegisterTag tag,
int bitBegin,
int bitWidth);
95 RMMResult fieldWrite(
const std::string ®, RegisterTag tag,
int bitBegin,
int bitWidth, uint32_t data);
98 rmmStatus
i2cWrite8bReg(
int i2c_addr,
int reg_addr, uint32_t data);
99 rmmStatus
i2cWrite16bReg(
int i2c_addr,
int reg_addr, uint32_t data);
101 RMMResult regMaskWrite(
const std::string ®Name, uint32_t data, uint32_t mask, RegisterTag tag = RegisterTag::ALL);
118 WRITE_THREE_BYTES = 3,
127 std::recursive_mutex i2cMut;
128 struct sockaddr_in serverAddr;
129 std::atomic<uint32_t> requestCount{0};
130 std::atomic<uint32_t> replyCount{0};
131 std::mutex soft_mutex;
132 std::atomic<bool> _legacyFW{
false};
133 std::unordered_map<RegisterTag, std::unordered_map<std::string, uint32_t>> addressMaps;
134 std::unordered_map<int, std::map<int, std::unordered_map<std::string, uint32_t>>> feaFwAddressMaps;
142 void i2cClaimMutex(uint32_t
id = I2C_MUTEX_SCTL_ID,
double poll_delay = 1.0,
int poll_attempts_timeout = -1);
143 void i2cReleaseMutex();
144 rmmStatus i2cSendWaitDone();
145 std::string sendSlowControlPacket(
const std::string &pkt);
146 bool isTimeout(std::string sent_data, std::string ans);
147 RMMResult parseReplayRecvData(
const std::string sent_data,
const std::string rec_data);
148 rmmStatus checkProtocolReply(std::string sent, std::string received);
150 uint32_t getFrontendRegAddress(
const std::string ®_name,
int ring,
int node);
152 std::vector<int> whichBitsAreSet(
int data);
154 sockaddr_in socketConnect(
const std::string &server_ip,
int server_port);
155 bool sendMessage(
const char *message,
size_t length);
156 std::vector<uint8_t> receiveBinaryMessage();
157 rmmStatus setSocketTimeout(
int seconds,
int microseconds);
159 std::atomic<bool> _stopRequested{
false};
161 RMMResult fieldReadImpl(std::function<RMMResult()> readFunc,
int bitBegin,
int bitWidth);
162 RMMResult fieldWriteImpl(std::function<RMMResult()> readFunc, std::function<RMMResult(uint32_t)> writeFunc,
163 int bitBegin,
int bitWidth, std::string reg, uint32_t data);
165 bool defineFwVersion();
167 friend class I2CMutex;
Class for managing and writing log messages to different log levels and files.
Definition RMMLog.h:47
void addRegMapMutexes(FENRegMap map)
Calls regMutex addMap.
Definition RMMRegisterAccess.cpp:57
RMMResult regMaskWrite(const std::string ®Name, uint32_t data, uint32_t mask, RegisterTag tag=RegisterTag::ALL)
Writes a value to a register using a bitmask.
Definition RMMRegisterAccess.cpp:649
RMMResult feaFwRegWrite(const std::string ®_name, int ring_id, int node_id, uint32_t data, const std::string &tag="")
Write in a front-end register, calculating the ring/node offset.
Definition RMMRegisterAccess.cpp:204
RMMResult regRead(const std::string ®Name, RegisterTag tag=RegisterTag::ALL)
Reads a register value by its name from the register map.
Definition RMMRegisterAccess.cpp:228
std::list< std::string > getAllRegMaps()
returns a list of shared pointers to current address maps.
Definition RMMRegisterAccess.cpp:120
uint32_t i2cRead8bRegSi570(int i2c_addr, int reg_addr)
Reads from an 8bit register at an I2C address (Si570 only).
Definition RMMRegisterAccess.cpp:620
RMMResult feaFwRegRead(const std::string ®_name, int ring_id, int node_id, const std::string &tag="")
Read a front-end register, calculating the ring/node offset.
Definition RMMRegisterAccess.cpp:184
void resetStop()
Resets the stop request flag, allowing operations to continue.
Definition RMMRegisterAccess.cpp:1015
std::unordered_map< RegisterTag, std::unordered_map< std::string, uint32_t > > fillAllAddressMaps()
Fill all address maps.
Definition RMMRegisterAccess.cpp:83
void regAssert(const std::string ®_name, uint32_t exp_data, RegisterTag tag=RegisterTag::ALL)
Check a register matches an expected value, or throw a ValueError exception.
Definition RMMRegisterAccess.cpp:248
rmmStatus regPoll(const std::string ®Name, uint32_t expData, double pollDelay=1.0, uint32_t timeout=0, RegisterTag regTag=RegisterTag::ALL, std::function< bool(uint32_t)> stopCondition=nullptr, std::function< bool()> checkStop=nullptr)
Polls a named register until it matches the expected value, or stops based on a custom stop condition...
Definition RMMRegisterAccess.cpp:309
RMMResult rawWrite(const std::string &addr, uint32_t data)
Performs a write operation to a register address.
Definition RMMRegisterAccess.cpp:710
void requestStop()
Requests to stop ongoing operations.
Definition RMMRegisterAccess.cpp:1010
rmmStatus i2cDelay(uint32_t delay)
Use the I2C controller to time a delay.
Definition RMMRegisterAccess.cpp:666
RegLockGuard regLockGuard(std::string reg, std::string tag="NoTag")
returns a lock guard object for that register mutex.
Definition RMMRegisterAccess.cpp:62
RMMResult rawRead(const std::string &addr)
Performs a read operation from a register address.
Definition RMMRegisterAccess.cpp:688
bool isLegacyFW() const
Checks if the FW version is legagy (Non UDP Core version).
Definition RMMRegisterAccess.cpp:1029
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 RMMRegisterAccess.cpp:469
RMMLog rmmLog
Log handler for RMMRegisterAccess messages.
Definition RMMRegisterAccess.h:106
RegisterTag
Enum class representing different register tags.
Definition RMMRegisterAccess.h:68
@ CTRL
Control register.
Definition RMMRegisterAccess.h:69
@ TIME
Time register.
Definition RMMRegisterAccess.h:71
@ CMAC
CMAC register (Used only by nonUDP FW version)
Definition RMMRegisterAccess.h:73
@ ALL
All registers.
Definition RMMRegisterAccess.h:74
@ ENG
Engineering register.
Definition RMMRegisterAccess.h:70
@ RING_MST
Ring master register.
Definition RMMRegisterAccess.h:72
RMMResult regWrite(const std::string ®Name, uint32_t data, RegisterTag tag=RegisterTag::ALL)
Writes a value to a named register.
Definition RMMRegisterAccess.cpp:272
std::string addrLookUp(const std::string &name, RegisterTag tag=RegisterTag::ALL)
Retrieves the address of a register from the address map.
Definition RMMRegisterAccess.cpp:143
rmmStatus i2cWrite8bReg(int i2c_addr, int reg_addr, uint32_t data)
Writes to an 8bit register at an I2C address.
Definition RMMRegisterAccess.cpp:575
bool addRegMutex(std::string reg, std::string tag="NoTag", bool critic=true)
Calls regMutex addReg.
Definition RMMRegisterAccess.cpp:76
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 RMMRegisterAccess.cpp:399
unsigned int addRegsMutexes(std::list< std::string > regs, bool critic=true)
Calls regMutex addRegs.
Definition RMMRegisterAccess.cpp:69
rmmStatus i2cWrite16bReg(int i2c_addr, int reg_addr, uint32_t data)
Writes to a 16bit register at an I2C address.
Definition RMMRegisterAccess.cpp:598
~RMMRegisterAccess()
Destructor of the RMMRegisterAccess.
Definition RMMRegisterAccess.cpp:49
bool isStopRequested() const
Checks if a stop request has been issued.
Definition RMMRegisterAccess.cpp:1022
rmmStatus i2cWriteByte(int i2c_addr, uint32_t data)
Writes a single byte to an I2C address.
Definition RMMRegisterAccess.cpp:553
RMMRegisterAccess(const std::string &serverIP, int serverPort)
Constructor of the RMMRegisterAccess instance.
Definition RMMRegisterAccess.cpp:33
A class that stores a map of mutexes, one for each register address. Each mutex can be locked or unlo...
Definition RegMutex.h:24
Struct to represent the result of an RMM register operation.
Definition RMMRegisterAccess.h:37
rmmStatus status
The status of the register operation.
Definition RMMRegisterAccess.h:39
uint32_t value
The value read from the register.
Definition RMMRegisterAccess.h:38
RMMResult(uint32_t val, rmmStatus stats=rmmSuccess)
Constructs an RMMResult instance.
Definition RMMRegisterAccess.h:45