RMM API 2.0.0
Loading...
Searching...
No Matches
RMMRingTimestamps.h
1#pragma once
2
3#include <cmath>
4
5#include "RMMRegisterAccess.h"
6#include "RMMUtils.h"
7
8enum class DomFiber { EVEN, ODD };
9
10class RMMRingTimestamps {
11 public:
12 RMMRingTimestamps(RMMRegisterAccess& RMMRegs);
13 void calcAndUpdateTimestamps(int ring, int nodes);
14
15 private:
16 static constexpr int MIN_NODEID = 0;
17 static constexpr int DIR_EVEN = 0x0;
18 static constexpr int DIR_ODD = 0x1;
19 static constexpr double C_158_PERIOD_NS = 6.309;
20 static constexpr double C_88_PERIOD_NS = 11.357;
21 static constexpr uint32_t DUMMY_TIME = 0xabcd1234;
22
23 RMMRegisterAccess& RMMRegs;
24
25 // Struct representing ToF data for a single direction
26 struct DirectionData {
27 uint64_t sent;
28 uint64_t got;
29 uint32_t node_dly;
30 };
31
32 // Struct representing the overall ToF results
33 struct ToFData {
34 DirectionData even;
35 DirectionData odd;
36 uint32_t time_set_dly;
37 };
38
39 RMMLog rmmLog;
40 ToFData getFeTimes(int logical_ring, int node_id);
41 DirectionData getFeTimesOneDirection(int ring, int node_id, bool dir_is_even);
42 void sendGetTimePkt(int ring, int node_id, bool dir_is_even);
43 uint64_t readout64bCounter(const std::string& measure, int engine_id);
44 std::unordered_map<std::string, uint32_t> getFeIcdlys(int ring, int node);
45};