Skip to content

Commit 2f9410d

Browse files
committed
[roc-status] Use different ONU sticky bit for monitoring and cli invocations
1 parent b99fc17 commit 2f9410d

File tree

6 files changed

+26
-15
lines changed

6 files changed

+26
-15
lines changed

src/CommandLineUtilities/ProgramStatus.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ class ProgramStatus : public Program
243243

244244
/* ONU PARAMETERS */
245245
if (mOptions.onu) {
246-
Cru::OnuStatus onuStatus = cruBar2->reportOnuStatus();
246+
Cru::OnuStatus onuStatus = cruBar2->reportOnuStatus(mOptions.monitoring);
247247

248248
std::string onuStickyStatus;
249249
int onuStickyStatusInt = 0;

src/Cru/Constants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ static constexpr uint32_t DATA_MIDTRG(0x2);*/
198198

199199
/// Registers for getting TTC info
200200
static constexpr Register TTC_ONU_STICKY(0x00200014);
201+
static constexpr Register TTC_ONU_STICKY_MON(0x00200014);
201202
static constexpr Register TTC_PON_QUALITY(0x0010000C);
202203

203204
/// Registers used for TTC calibration

src/Cru/CruBar.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,10 +1128,10 @@ void CruBar::patternPlayer(PatternPlayer::Info info)
11281128
pp.play(info);
11291129
}
11301130

1131-
Cru::OnuStatus CruBar::reportOnuStatus()
1131+
Cru::OnuStatus CruBar::reportOnuStatus(bool monitoring)
11321132
{
11331133
Ttc ttc = Ttc(mPdaBar, mSerial, mEndpoint);
1134-
return ttc.onuStatus();
1134+
return ttc.onuStatus(monitoring);
11351135
}
11361136

11371137
Cru::FecStatus CruBar::reportFecStatus()

src/Cru/CruBar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class CruBar final : public BarInterfaceBase
101101
void toggleRunStatsLink(bool mRunStatsLinkEnabled);
102102
boost::optional<std::string> getUserLogicVersion();
103103

104-
Cru::OnuStatus reportOnuStatus();
104+
Cru::OnuStatus reportOnuStatus(bool monitoring = false);
105105
Cru::FecStatus reportFecStatus();
106106

107107
void controlUserLogic(uint32_t eventSize, bool random, uint32_t systemId, uint32_t linkId);

src/Cru/Ttc.cxx

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,23 @@ bool Ttc::configurePonTx(uint32_t onuAddress)
146146
//TODO: Show calibration status..
147147
}
148148

149-
LinkStatus Ttc::getOnuStickyBit()
150-
{
151-
uint32_t was = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY.index);
152-
mBar->modifyRegister(Cru::Registers::TTC_DATA.index, 28, 1, 0x1);
153-
mBar->modifyRegister(Cru::Registers::TTC_DATA.index, 28, 1, 0x0);
154-
uint32_t is = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY.index);
155-
149+
// The monitoring parameter is set when roc-status is called through the monitoring infrastructure
150+
// this reports and clears a different register, so that clock information is not lost
151+
// from rogue invocations of roc-status
152+
LinkStatus Ttc::getOnuStickyBit(bool monitoring)
153+
{
154+
uint32_t was, is;
155+
if (monitoring) {
156+
was = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY_MON.index);
157+
mBar->writeRegister(Cru::Registers::TTC_ONU_STICKY_MON.index, 0x1);
158+
mBar->writeRegister(Cru::Registers::TTC_ONU_STICKY_MON.index, 0x0);
159+
is = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY_MON.index);
160+
} else {
161+
was = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY.index);
162+
mBar->modifyRegister(Cru::Registers::TTC_DATA.index, 28, 1, 0x1);
163+
mBar->modifyRegister(Cru::Registers::TTC_DATA.index, 28, 1, 0x0);
164+
is = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY.index);
165+
}
156166
if (was == 0x0 && is == 0x0) {
157167
return LinkStatus::Up;
158168
} else if (was != 0x0 && is == 0x0) {
@@ -161,7 +171,7 @@ LinkStatus Ttc::getOnuStickyBit()
161171
return LinkStatus::Down;
162172
}
163173

164-
OnuStatus Ttc::onuStatus()
174+
OnuStatus Ttc::onuStatus(bool monitoring)
165175
{
166176
uint32_t calStatus = mBar->readRegister(Cru::Registers::ONU_USER_LOGIC.index + 0xc / 4);
167177
uint32_t onuAddress = mBar->readRegister(Cru::Registers::ONU_USER_LOGIC.index) >> 1;
@@ -176,7 +186,7 @@ OnuStatus Ttc::onuStatus()
176186
(calStatus >> 5 & 0x1) == 1,
177187
(calStatus >> 6 & 0x1) == 1,
178188
(calStatus >> 7 & 0x1) == 1,
179-
getOnuStickyBit(),
189+
getOnuStickyBit(monitoring),
180190
getPonQuality(),
181191
getPonQualityStatus(),
182192
getPonRxPower()

src/Cru/Ttc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ class Ttc
6262
void setEmulatorORBITINIT(uint32_t orbitInit);
6363
void setFixedBCTrigger(std::vector<uint32_t> FBCTVector);
6464

65-
OnuStatus onuStatus();
65+
OnuStatus onuStatus(bool monitoring = false);
6666
FecStatus fecStatus();
6767

6868
private:
6969
void configurePlls(uint32_t clock);
7070
void setRefGen(int frequency = 240);
71-
LinkStatus getOnuStickyBit();
71+
LinkStatus getOnuStickyBit(bool monitoring = false);
7272
uint32_t getPonQuality();
7373
int getPonQualityStatus();
7474
double getPonRxPower();

0 commit comments

Comments
 (0)