Skip to content

Commit 67caf3e

Browse files
committed
[status] Add option to specify links reported
1 parent db6d194 commit 67caf3e

File tree

5 files changed

+33
-0
lines changed

5 files changed

+33
-0
lines changed

src/CommandLineUtilities/ProgramStatus.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ class ProgramStatus : public Program
5858
options.add_options()("onu-status",
5959
po::bool_switch(&mOptions.onu),
6060
"Toggle ONU status output");
61+
options.add_options()("links",
62+
po::value<std::string>(&mOptions.links)->default_value("0-11"),
63+
"Links to show (all by default)");
6164
}
6265

6366
virtual void run(const boost::program_options::variables_map& map)
@@ -95,6 +98,7 @@ class ProgramStatus : public Program
9598
}
9699

97100
auto params = Parameters::makeParameters(cardId, 0); //status available on BAR0
101+
params.setLinkMask(Parameters::linkMaskFromString(mOptions.links));
98102
auto bar0 = ChannelFactory().getBar(params);
99103
auto crorcBar0 = std::dynamic_pointer_cast<CrorcBar>(bar0);
100104

@@ -175,6 +179,7 @@ class ProgramStatus : public Program
175179
lineThin = std::string(header.length(), '-') + '\n';
176180

177181
auto params = Parameters::makeParameters(cardId, 2); //status available on BAR2
182+
params.setLinkMask(Parameters::linkMaskFromString(mOptions.links));
178183
auto bar2 = ChannelFactory().getBar(params);
179184
auto cruBar2 = std::dynamic_pointer_cast<CruBar>(bar2);
180185

@@ -400,6 +405,7 @@ class ProgramStatus : public Program
400405

401406
private:
402407
struct OptionsStruct {
408+
std::string links = "0-11";
403409
bool jsonOut = false;
404410
bool monitoring = false;
405411
bool onu = false;

src/Crorc/CrorcBar.cxx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ CrorcBar::CrorcBar(const Parameters& parameters, std::unique_ptr<RocPciDevice> r
3737
: BarInterfaceBase(parameters, std::move(rocPciDevice)),
3838
mCrorcId(parameters.getCrorcId().get_value_or(0x0)),
3939
mDynamicOffset(parameters.getDynamicOffsetEnabled().get_value_or(false)),
40+
mLinkMask(parameters.getLinkMask().get_value_or(std::set<uint32_t>{ 0, 1, 2, 3, 4, 5 })),
4041
mTimeFrameLength(parameters.getTimeFrameLength().get_value_or(0x100)),
4142
mTimeFrameDetectionEnabled(parameters.getTimeFrameDetectionEnabled().get_value_or(true))
4243
{
@@ -131,6 +132,17 @@ void CrorcBar::configure(bool /*force*/)
131132
Crorc::ReportInfo CrorcBar::report()
132133
{
133134
std::map<int, Crorc::Link> linkMap = initializeLinkMap();
135+
136+
// strip down link map, depending on link(s) requested to report on
137+
// "associative-container erase idiom"
138+
for (auto it = linkMap.cbegin(); it != linkMap.cend(); /* no increment */) {
139+
if ((mLinkMask.find(it->first) == mLinkMask.end())) {
140+
linkMap.erase(it++);
141+
} else {
142+
it++;
143+
}
144+
}
145+
134146
getOpticalPowers(linkMap);
135147
Crorc::ReportInfo reportInfo = {
136148
linkMap,

src/Crorc/CrorcBar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ class CrorcBar final : public BarInterfaceBase
9494

9595
uint16_t mCrorcId;
9696
bool mDynamicOffset;
97+
std::set<uint32_t> mLinkMask;
9798
uint16_t mTimeFrameLength;
9899
bool mTimeFrameDetectionEnabled;
99100
};

src/Cru/CruBar.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,16 @@ Cru::ReportInfo CruBar::report()
459459
{
460460
std::map<int, Link> linkMap = initializeLinkMap();
461461

462+
// strip down link map, depending on link(s) requested to report on
463+
// "associative-container erase idiom"
464+
for (auto it = linkMap.cbegin(); it != linkMap.cend(); /* no increment */) {
465+
if ((mLinkMask.find(it->first) == mLinkMask.end())) {
466+
linkMap.erase(it++);
467+
} else {
468+
it++;
469+
}
470+
}
471+
462472
bool gbtEnabled = false;
463473
// Update linkMap
464474
Gbt gbt = Gbt(mPdaBar, linkMap, mWrapperCount, mEndpoint);

test/TestParameters.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ BOOST_AUTO_TEST_CASE(ParametersLinkMaskFromString)
6868
BOOST_CHECK(Parameters::linkMaskFromString("0,1,4-6") == b);
6969
BOOST_CHECK(Parameters::linkMaskFromString("0-1,4-6") == b);
7070
}
71+
{
72+
auto c = Parameters::LinkMaskType{ 0, 3, 4, 5 };
73+
BOOST_CHECK(Parameters::linkMaskFromString("0,3-5") == c);
74+
}
7175
BOOST_CHECK_THROW(Parameters::linkMaskFromString("0/2/3/4"), ParseException);
7276
BOOST_CHECK_THROW(Parameters::linkMaskFromString("0,1,2,3+4"), ParseException);
7377
}

0 commit comments

Comments
 (0)