Skip to content

Commit dee8775

Browse files
committed
[pat-player] Add read-back functionality
1 parent ca78e0b commit dee8775

File tree

5 files changed

+111
-11
lines changed

5 files changed

+111
-11
lines changed

include/ReadoutCard/PatternPlayer.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class PatternPlayer
4848

4949
PatternPlayer(std::shared_ptr<BarInterface> bar);
5050
void play(PatternPlayer::Info info);
51+
PatternPlayer::Info read();
5152

5253
private:
5354
void configure(bool startConfig);
@@ -61,6 +62,15 @@ class PatternPlayer
6162
void triggerSync();
6263
void triggerReset();
6364

65+
uint128_t getSyncPattern();
66+
uint128_t getResetPattern();
67+
uint128_t getIdlePattern();
68+
uint32_t getSyncLength();
69+
uint32_t getSyncDelay();
70+
uint32_t getResetLength();
71+
uint32_t getResetTriggerSelect();
72+
uint32_t getSyncTriggerSelect();
73+
6474
std::shared_ptr<BarInterface> mBar;
6575
};
6676

src/CommandLineUtilities/ProgramPatternPlayer.cxx

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ class ProgramPatternPlayer : public Program
7777
options.add_options()("trigger-reset",
7878
po::bool_switch(&mOptions.triggerReset)->default_value(false),
7979
"Manually trigger the reset pattern");
80+
options.add_options()("read-back",
81+
po::bool_switch(&mOptions.readBack)->default_value(false),
82+
"Reads back the pattern player configuration [DOES NOT CONFIGURE!!]");
8083
}
8184

8285
virtual void run(const boost::program_options::variables_map& map)
@@ -96,17 +99,29 @@ class ProgramPatternPlayer : public Program
9699
}
97100

98101
auto cruBar2 = std::dynamic_pointer_cast<CruBar>(bar2);
99-
cruBar2->patternPlayer({ uint128_t(mOptions.syncPattern), //TODO: Parse this correctly!
100-
uint128_t(mOptions.resetPattern),
101-
uint128_t(mOptions.idlePattern),
102-
mOptions.syncLength,
103-
mOptions.syncDelay,
104-
mOptions.resetLength,
105-
mOptions.resetTriggerSelect,
106-
mOptions.syncTriggerSelect,
107-
mOptions.syncAtStart,
108-
mOptions.triggerSync,
109-
mOptions.triggerReset });
102+
if (!mOptions.readBack) {
103+
cruBar2->patternPlayer({ uint128_t(mOptions.syncPattern), //TODO: Parse this correctly!
104+
uint128_t(mOptions.resetPattern),
105+
uint128_t(mOptions.idlePattern),
106+
mOptions.syncLength,
107+
mOptions.syncDelay,
108+
mOptions.resetLength,
109+
mOptions.resetTriggerSelect,
110+
mOptions.syncTriggerSelect,
111+
mOptions.syncAtStart,
112+
mOptions.triggerSync,
113+
mOptions.triggerReset });
114+
} else {
115+
auto ppInfo = cruBar2->patternPlayerRead();
116+
std::cout << "sync pattern:\t\t0x" << std::hex << ppInfo.syncPattern << std::endl;
117+
std::cout << "reset pattern:\t\t0x" << ppInfo.resetPattern << std::endl;
118+
std::cout << "idle pattern:\t\t0x" << ppInfo.idlePattern << std::dec << std::endl;
119+
std::cout << "sync length:\t\t" << ppInfo.syncLength << std::endl;
120+
std::cout << "sync delay:\t\t" << ppInfo.syncDelay << std::endl;
121+
std::cout << "reset length:\t\t" << ppInfo.resetLength << std::endl;
122+
std::cout << "reset trigger select:\t" << ppInfo.resetTriggerSelect << std::endl;
123+
std::cout << "sync trigger select:\t" << ppInfo.syncTriggerSelect << std::endl;
124+
}
110125
}
111126

112127
private:
@@ -122,6 +137,7 @@ class ProgramPatternPlayer : public Program
122137
bool syncAtStart = false;
123138
bool triggerSync = false;
124139
bool triggerReset = false;
140+
bool readBack = false;
125141
} mOptions;
126142
};
127143

src/Cru/CruBar.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,12 @@ void CruBar::patternPlayer(PatternPlayer::Info info)
11461146
pp.play(info);
11471147
}
11481148

1149+
PatternPlayer::Info CruBar::patternPlayerRead()
1150+
{
1151+
PatternPlayer pp = PatternPlayer(mPdaBar);
1152+
return pp.read();
1153+
}
1154+
11491155
Cru::OnuStatus CruBar::reportOnuStatus(bool monitoring)
11501156
{
11511157
Ttc ttc = Ttc(mPdaBar, mSerial, mEndpoint);

src/Cru/CruBar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class CruBar final : public BarInterfaceBase
9090
Cru::TriggerMonitoringInfo monitorTriggers(bool updateable = false);
9191
void emulateCtp(Cru::CtpInfo);
9292
void patternPlayer(PatternPlayer::Info patternPlayerInfo);
93+
PatternPlayer::Info patternPlayerRead();
9394

9495
void enableDataTaking();
9596
void disableDataTaking();

src/Cru/PatternPlayer.cxx

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,23 @@ void PatternPlayer::play(PatternPlayer::Info info)
5757
}
5858
}
5959

60+
PatternPlayer::Info PatternPlayer::read()
61+
{
62+
return {
63+
getSyncPattern(),
64+
getResetPattern(),
65+
getIdlePattern(),
66+
getSyncLength(),
67+
getSyncDelay(),
68+
getResetLength(),
69+
getResetTriggerSelect(),
70+
getSyncTriggerSelect(),
71+
false,
72+
false,
73+
false
74+
};
75+
}
76+
6077
/// Configure has to be called to enable/disable pattern player configuration
6178
void PatternPlayer::configure(bool startConfig)
6279
{
@@ -74,36 +91,86 @@ void PatternPlayer::setIdlePattern(uint128_t pattern)
7491
mBar->writeRegister(Cru::Registers::PATPLAYER_IDLE_PATTERN_2.index, uint32_t((pattern >> 64) & 0xffff));
7592
}
7693

94+
uint128_t PatternPlayer::getIdlePattern()
95+
{
96+
uint128_t pattern = mBar->readRegister(Cru::Registers::PATPLAYER_IDLE_PATTERN_2.index);
97+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_IDLE_PATTERN_1.index);
98+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_IDLE_PATTERN_0.index);
99+
return pattern;
100+
}
101+
77102
void PatternPlayer::setSyncPattern(uint128_t pattern)
78103
{
79104
mBar->writeRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_0.index, uint32_t(pattern & 0xffffffff));
80105
mBar->writeRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_1.index, uint32_t((pattern >> 32) & 0xffffffff));
81106
mBar->writeRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_2.index, uint32_t((pattern >> 64) & 0xffff));
82107
}
83108

109+
uint128_t PatternPlayer::getSyncPattern()
110+
{
111+
uint128_t pattern = mBar->readRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_2.index);
112+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_1.index);
113+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_SYNC_PATTERN_0.index);
114+
return pattern;
115+
}
116+
84117
void PatternPlayer::configureSync(uint32_t length, uint32_t delay)
85118
{
86119
mBar->writeRegister(Cru::Registers::PATPLAYER_SYNC_CNT.index, length + delay);
87120
mBar->writeRegister(Cru::Registers::PATPLAYER_DELAY_CNT.index, delay);
88121
}
89122

123+
uint32_t PatternPlayer::getSyncLength()
124+
{
125+
return mBar->readRegister(Cru::Registers::PATPLAYER_SYNC_CNT.index) -
126+
mBar->readRegister(Cru::Registers::PATPLAYER_DELAY_CNT.index);
127+
}
128+
129+
uint32_t PatternPlayer::getSyncDelay()
130+
{
131+
return mBar->readRegister(Cru::Registers::PATPLAYER_DELAY_CNT.index);
132+
}
133+
90134
void PatternPlayer::setResetPattern(uint128_t pattern)
91135
{
92136
mBar->writeRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_0.index, uint32_t(pattern & 0xffffffff));
93137
mBar->writeRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_1.index, uint32_t((pattern >> 32) & 0xffffffff));
94138
mBar->writeRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_2.index, uint32_t((pattern >> 64) & 0xffff));
95139
}
96140

141+
uint128_t PatternPlayer::getResetPattern()
142+
{
143+
uint128_t pattern = mBar->readRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_2.index);
144+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_1.index);
145+
pattern = pattern << 32 | mBar->readRegister(Cru::Registers::PATPLAYER_RESET_PATTERN_0.index);
146+
return pattern;
147+
}
148+
97149
void PatternPlayer::configureReset(uint32_t length)
98150
{
99151
mBar->writeRegister(Cru::Registers::PATPLAYER_RESET_CNT.index, length);
100152
}
101153

154+
uint32_t PatternPlayer::getResetLength()
155+
{
156+
return mBar->readRegister(Cru::Registers::PATPLAYER_RESET_CNT.index);
157+
}
158+
102159
void PatternPlayer::selectPatternTrigger(uint32_t syncTrigger, uint32_t resetTrigger)
103160
{
104161
mBar->writeRegister(Cru::Registers::PATPLAYER_TRIGGER_SEL.index, (resetTrigger << 16) | syncTrigger);
105162
}
106163

164+
uint32_t PatternPlayer::getResetTriggerSelect()
165+
{
166+
return (mBar->readRegister(Cru::Registers::PATPLAYER_TRIGGER_SEL.index) >> 16);
167+
}
168+
169+
uint32_t PatternPlayer::getSyncTriggerSelect()
170+
{
171+
return (mBar->readRegister(Cru::Registers::PATPLAYER_TRIGGER_SEL.index) & 0xffff);
172+
}
173+
107174
/*** No need to enable configuration for these last 3 ***/
108175
void PatternPlayer::enableSyncAtStart(bool enable)
109176
{

0 commit comments

Comments
 (0)