From 6c65d4edf9c875539f7466214c6ab8bf73562b31 Mon Sep 17 00:00:00 2001 From: Kostas Alexopoulos Date: Thu, 7 May 2020 16:27:49 +0200 Subject: [PATCH] [crorc] Add Register Sequence support for the CRORC --- README.md | 2 +- apps/Alf.cxx | 40 ++++++----- apps/AlfClient.cxx | 31 +++++++-- src/AlfClient.h | 39 +++++++++++ src/AlfServer.cxx | 115 ++++++++++++++++++++++--------- src/AlfServer.h | 5 +- src/Common.h | 6 +- src/DimServices/ServiceNames.cxx | 5 +- src/DimServices/ServiceNames.h | 5 +- src/Ic/Ic.cxx | 4 +- src/Ic/Ic.h | 2 +- src/Sca/Sca.cxx | 8 +-- src/Swt/Swt.cxx | 10 +-- 13 files changed, 196 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index c38eb16..b713fca 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ The services are DIM RPC services. Every RPC is called with a string and expects * Example: * DIM input `reset\n0x0000000000badc0ffee,write\nread\n0xbadf00d,write\n4,read` - * DIM output `0\n0x0000000000badc0ffee\n0x000000000000badf00d\n` + * DIM output `0\n0x0000000000badc0ffee\n0\n0x000000000000badf00d\n` #### IC_SEQUENCE diff --git a/apps/Alf.cxx b/apps/Alf.cxx index fc0d403..6039bec 100644 --- a/apps/Alf.cxx +++ b/apps/Alf.cxx @@ -87,39 +87,45 @@ class Alf : public AliceO2::Common::Program AlfServer alfServer = AlfServer(); std::vector cardsFound = roc::findCards(); - int cruSequence = -1; + int cardSequence = -1; for (auto const& card : cardsFound) { std::vector links; - std::shared_ptr bar2; + std::shared_ptr bar; // Make the RPC services for every card & link - if (card.cardType == roc::CardType::Cru) { - - if (!mOptions.noFirmwareCheck) { - try { - roc::FirmwareChecker().checkFirmwareCompatibility(card.pciAddress); - } catch (const roc::Exception& e) { - getWarningLogger() << boost::diagnostic_information(e) << endm; - continue; - } + if (!mOptions.noFirmwareCheck) { + try { + roc::FirmwareChecker().checkFirmwareCompatibility(card.pciAddress); + } catch (const roc::Exception& e) { + getWarningLogger() << boost::diagnostic_information(e) << endm; + continue; } + } - cruSequence++; + cardSequence++; - getLogger() << "CRU #" << cruSequence << " : " << card.pciAddress << endm; - bar2 = roc::ChannelFactory().getBar(card.pciAddress, 2); + if (card.cardType == roc::CardType::Cru) { + + getLogger() << "CRU #" << cardSequence << " : " << card.pciAddress << endm; + bar = roc::ChannelFactory().getBar(card.pciAddress, 2); for (int linkId = 0; linkId < CRU_NUM_LINKS; linkId++) { - links.push_back({ alfId, cruSequence, linkId, bar2 }); + links.push_back({ alfId, cardSequence, linkId, bar, roc::CardType::Cru }); } + } else if (card.cardType == roc::CardType::Crorc) { + getLogger() << "CRORC #" << cardSequence << " : " << card.pciAddress << endm; + for (int linkId = 0; linkId < CRORC_NUM_LINKS; linkId++) { + bar = roc::ChannelFactory().getBar(card.pciAddress, linkId); + links.push_back({ alfId, cardSequence, linkId, bar, roc::CardType::Crorc }); + } } else { - getLogger() << InfoLogger::InfoLogger::Severity::Warning << card.pciAddress << " is not a CRU. Skipping..." << endm; + getLogger() << InfoLogger::InfoLogger::Severity::Warning << card.pciAddress << " is not a CRU or a CRORC. Skipping..." << endm; } if (isVerbose()) { for (auto const& link : links) { - getLogger() << link.alfId << " " << link.cruSequence << " " << link.linkId << endm; + getLogger() << link.alfId << " " << link.cardSequence << " " << link.linkId << endm; } } diff --git a/apps/AlfClient.cxx b/apps/AlfClient.cxx index a6c6c95..30fe4ad 100644 --- a/apps/AlfClient.cxx +++ b/apps/AlfClient.cxx @@ -53,15 +53,18 @@ class AlfClient : public AliceO2::Common::Program options.add_options()("dim-dns-node", po::value(&mOptions.dimDnsNode)->default_value(""), "The DIM DNS node to connect to if the env var is not set"); - options.add_options()("cru-sequence", - po::value(&mOptions.cruSequence), - "CRU sequence number"); + options.add_options()("card-sequence", + po::value(&mOptions.cardSequence), + "Card sequence number"); options.add_options()("link", po::value(&mOptions.link), "Link number"); options.add_options()("alf-id", po::value(&mOptions.alfId)->default_value(""), "Hostname of node running the ALF server(required)"); + options.add_options()("crorc", + po::bool_switch(&mOptions.crorc)->default_value(false), + "Flag enabling the test of the crorc (exclusive)"); options.add_options()("ic", po::bool_switch(&mOptions.ic)->default_value(false), "Flag enabling the ic tests"); @@ -109,11 +112,26 @@ class AlfClient : public AliceO2::Common::Program std::string alfId = mOptions.alfId; boost::to_upper(alfId); - getLogger() << "Starting the DIM Client using ALF ID=" << alfId << ", cru #=" << mOptions.cruSequence << " and link=" << mOptions.link << endm; + getLogger() << "Starting the DIM Client using ALF ID=" << alfId << ", card #=" << mOptions.cardSequence << " and link=" << mOptions.link << endm; - AlfLink link = AlfLink{ alfId, mOptions.cruSequence, mOptions.link, nullptr }; + AlfLink link = AlfLink{ alfId, mOptions.cardSequence, mOptions.link, nullptr, roc::CardType::Cru }; ServiceNames names(link); + + if (mOptions.crorc) { + link.cardType = roc::CardType::Crorc; + Alf::RegisterSequenceRpc registerSequence(names.registerSequence()); + auto regOut = registerSequence.write({ std::make_pair("0x19c", ""), + std::make_pair("0xa0", ""), + std::make_pair("0x1f0", ""), + std::make_pair("0x1f0", "0x00080000"), + std::make_pair("0x1f0", "") }); + getLogger() << "[REGISTER SEQUENCE] output: " << regOut << endm; + + return; + } + + // Only CRU from this point forward Alf::RegisterReadRpc registerReadRpc(names.registerRead()); Alf::RegisterWriteRpc registerWriteRpc(names.registerWrite()); Alf::PatternPlayerRpc patternPlayerRpc(names.patternPlayer()); @@ -214,9 +232,10 @@ class AlfClient : public AliceO2::Common::Program private: struct OptionsStruct { std::string dimDnsNode = ""; - int cruSequence = -1; + int cardSequence = -1; int link = -1; std::string alfId = ""; + bool crorc = false; bool ic = false; bool sca = false; bool swt = false; diff --git a/src/AlfClient.h b/src/AlfClient.h index ae6cf57..4f55c19 100644 --- a/src/AlfClient.h +++ b/src/AlfClient.h @@ -144,6 +144,45 @@ class ScaSequenceRpc : DimRpcInfoWrapper } }; +class RegisterSequenceRpc : DimRpcInfoWrapper +{ + public: + RegisterSequenceRpc(const std::string& serviceName) + : DimRpcInfoWrapper(serviceName) + { + } + + std::string write(const std::string& buffer) + { + std::cout << "Setting: " << buffer << std::endl; + setString(buffer); + std::string ret; + try { + ret = getString(); + } catch (const AlfException& e) { + getErrorLogger() << "RegisterSequence: " << boost::diagnostic_information(e, true) << endm; + return errString; + } + return ret; + } + + std::string write(const std::vector>& sequence) + { + std::stringstream buffer; + for (size_t i = 0; i < sequence.size(); ++i) { + if (sequence[i].second == "") { // It's a read + buffer << sequence[i].first; + } else { //It's a write + buffer << sequence[i].first << pairSeparator() << sequence[i].second; + } + if (i + 1 < sequence.size()) { + buffer << argumentSeparator(); + } + } + return write(buffer.str()); + } +}; + class SwtSequenceRpc : DimRpcInfoWrapper { public: diff --git a/src/AlfServer.cxx b/src/AlfServer.cxx index 4392792..df54c64 100644 --- a/src/AlfServer.cxx +++ b/src/AlfServer.cxx @@ -33,16 +33,16 @@ AlfServer::AlfServer() : mRpcServers() { } -std::string AlfServer::registerRead(const std::string& parameter, std::shared_ptr bar2) +std::string AlfServer::registerRead(const std::string& parameter, std::shared_ptr bar) { uint32_t address = Util::stringToHex(parameter); // Error from here will get picked up by the StringRpcServer try clause //Util::checkAddress(address); - uint32_t value = bar2->readRegister(address / 4); + uint32_t value = bar->readRegister(address / 4); return Util::formatValue(value); } -std::string AlfServer::registerWrite(const std::string& parameter, std::shared_ptr bar2) +std::string AlfServer::registerWrite(const std::string& parameter, std::shared_ptr bar) { std::vector params = Util::split(parameter, pairSeparator()); @@ -54,10 +54,32 @@ std::string AlfServer::registerWrite(const std::string& parameter, std::shared_p //Util::checkAddress(address); uint32_t value = Util::stringToHex(params[1]); - bar2->writeRegister(address / 4, value); + bar->writeRegister(address / 4, value); return ""; } +std::string AlfServer::registerBlobWrite(const std::string& parameter, AlfLink link) +{ + std::vector stringPairs = Util::split(parameter, argumentSeparator()); + std::vector> registerPairs = parseStringToRegisterPairs(stringPairs); + std::stringstream resultBuffer; + uint32_t value; + uint32_t address; + for (const auto& registerPair : registerPairs) { + address = registerPair.at(0); + if (registerPair.size() == 1) { + value = link.bar->readRegister(address / 4); + resultBuffer << Util::formatValue(value) << "\n"; + } else if (registerPair.size() == 2) { + value = registerPair.at(1); + link.bar->writeRegister(address / 4, value); + resultBuffer << "0" + << "\n"; + } + } + return resultBuffer.str(); +} + std::string AlfServer::scaBlobWrite(const std::string& parameter, AlfLink link) { std::vector stringPairs = Util::split(parameter, argumentSeparator()); @@ -177,6 +199,16 @@ roc::PatternPlayer::Info AlfServer::parseStringToPatternPlayerInfo(const std::ve return ppInfo; } +std::vector AlfServer::stringToRegisterPair(const std::string stringPair) +{ + std::vector registers; + auto stringRegisters = Util::split(stringPair, pairSeparator()); + for (const auto& stringRegister : stringRegisters) { + registers.push_back(Util::stringToHex(stringRegister)); + } + return registers; +} + std::pair AlfServer::stringToScaPair(const std::string stringPair) { std::vector scaPair = Util::split(stringPair, pairSeparator()); @@ -209,7 +241,6 @@ std::pair AlfServer::stringToScaPair(const std::strin /// Converts a 76-bit hex number string std::pair AlfServer::stringToSwtPair(const std::string stringPair) { - std::cout << "trigger" << std::endl; std::vector swtPair = Util::split(stringPair, pairSeparator()); if (swtPair.size() < 1 || swtPair.size() > 2) { BOOST_THROW_EXCEPTION( @@ -346,6 +377,17 @@ std::pair AlfServer::stringToIcPair(const std::string return std::make_pair(icData, icOperation); } +std::vector> AlfServer::parseStringToRegisterPairs(std::vector stringPairs) +{ + std::vector> pairs; + for (const auto& stringPair : stringPairs) { + if (stringPair.find('#') == std::string::npos) { + pairs.push_back(stringToRegisterPair(stringPair)); + } + } + return pairs; +} + std::vector> AlfServer::parseStringToScaPairs(std::vector stringPairs) { std::vector> pairs; @@ -394,35 +436,42 @@ void AlfServer::makeRpcServers(std::vector links) ServiceNames names(link); // Start the RPC Servers - auto& servers = mRpcServers[link.cruSequence][link.linkId]; - std::shared_ptr bar2 = link.bar2; - - if (link.linkId == 0) { // Register Read / Write services are per card; register them as soon as possible - // Register Read - servers.push_back(makeServer(names.registerRead(), - [bar2](auto parameter) { return registerRead(parameter, bar2); })); - // Register Write - servers.push_back(makeServer(names.registerWrite(), - [bar2](auto parameter) { return registerWrite(parameter, bar2); })); - - // Register Write - servers.push_back(makeServer(names.patternPlayer(), - [bar2](auto parameter) { return patternPlayer(parameter, bar2); })); - } + auto& servers = mRpcServers[link.cardSequence][link.linkId]; + std::shared_ptr bar = link.bar; + + if (link.cardType == roc::CardType::Cru) { + if (link.linkId == 0) { // Register Read / Write services are per card; register them as soon as possible + // Register Read + servers.push_back(makeServer(names.registerRead(), + [bar](auto parameter) { return registerRead(parameter, bar); })); + // Register Write + servers.push_back(makeServer(names.registerWrite(), + [bar](auto parameter) { return registerWrite(parameter, bar); })); + + // Pattern Player + servers.push_back(makeServer(names.patternPlayer(), + [bar](auto parameter) { return patternPlayer(parameter, bar); })); + } - // SCA Sequence - servers.push_back(makeServer(names.scaSequence(), - [link](auto parameter) { return scaBlobWrite(parameter, link); })); - // SWT Sequence - servers.push_back(makeServer(names.swtSequence(), - [link](auto parameter) { return swtBlobWrite(parameter, link); })); - // IC Sequence - servers.push_back(makeServer(names.icSequence(), - [link](auto parameter) { return icBlobWrite(parameter, link); })); - - // IC GBT I2C write - servers.push_back(makeServer(names.icGbtI2cWrite(), - [link](auto parameter) { return icGbtI2cWrite(parameter, link); })); + // SCA Sequence + servers.push_back(makeServer(names.scaSequence(), + [link](auto parameter) { return scaBlobWrite(parameter, link); })); + // SWT Sequence + servers.push_back(makeServer(names.swtSequence(), + [link](auto parameter) { return swtBlobWrite(parameter, link); })); + // IC Sequence + servers.push_back(makeServer(names.icSequence(), + [link](auto parameter) { return icBlobWrite(parameter, link); })); + + // IC GBT I2C write + servers.push_back(makeServer(names.icGbtI2cWrite(), + [link](auto parameter) { return icGbtI2cWrite(parameter, link); })); + + } else if (link.cardType == roc::CardType::Crorc) { + // Register Sequence + servers.push_back(makeServer(names.registerSequence(), + [link](auto parameter) { return registerBlobWrite(parameter, link); })); + } } } diff --git a/src/AlfServer.h b/src/AlfServer.h index d420f5e..7378557 100644 --- a/src/AlfServer.h +++ b/src/AlfServer.h @@ -50,16 +50,19 @@ class AlfServer static std::string icBlobWrite(const std::string& parameter, AlfLink link); static std::string icGbtI2cWrite(const std::string& parameter, AlfLink link); static std::string patternPlayer(const std::string& parameter, std::shared_ptr); + static std::string registerBlobWrite(const std::string& parameter, AlfLink link); + static std::vector stringToRegisterPair(const std::string stringPair); static std::pair stringToScaPair(const std::string stringPair); static std::pair stringToSwtPair(const std::string stringPair); static std::pair stringToIcPair(const std::string stringPair); + static std::vector> parseStringToRegisterPairs(std::vector stringPairs); static std::vector> parseStringToScaPairs(std::vector stringPairs); static std::vector> parseStringToSwtPairs(std::vector stringPairs); static std::vector> parseStringToIcPairs(std::vector stringPairs); static roc::PatternPlayer::Info parseStringToPatternPlayerInfo(const std::vector sringsPairs); - /// cruSequence -> link -> vector of RPC servers + /// cardSequence -> link -> vector of RPC servers std::map>>> mRpcServers; }; diff --git a/src/Common.h b/src/Common.h index 06b8820..37b9e03 100644 --- a/src/Common.h +++ b/src/Common.h @@ -19,6 +19,7 @@ #include #include "ReadoutCard/BarInterface.h" +#include "ReadoutCard/CardType.h" namespace AliceO2 { @@ -33,9 +34,10 @@ static constexpr auto CHANNEL_BUSY_TIMEOUT = std::chrono::milliseconds(10); struct AlfLink { std::string alfId; - int cruSequence; + int cardSequence; int linkId; - std::shared_ptr bar2; + std::shared_ptr bar; + roc::CardType::type cardType; }; } // namespace Alf diff --git a/src/DimServices/ServiceNames.cxx b/src/DimServices/ServiceNames.cxx index 3273409..bf481c3 100644 --- a/src/DimServices/ServiceNames.cxx +++ b/src/DimServices/ServiceNames.cxx @@ -38,6 +38,7 @@ DEFCARDSERVICENAME(registerRead, "REGISTER_READ") DEFCARDSERVICENAME(registerWrite, "REGISTER_WRITE") DEFCARDSERVICENAME(patternPlayer, "PATTERN_PLAYER") +DEFLINKSERVICENAME(registerSequence, "REGISTER_SEQUENCE") DEFLINKSERVICENAME(scaSequence, "SCA_SEQUENCE") DEFLINKSERVICENAME(swtSequence, "SWT_SEQUENCE") DEFLINKSERVICENAME(icSequence, "IC_SEQUENCE") @@ -45,12 +46,12 @@ DEFLINKSERVICENAME(icGbtI2cWrite, "IC_GBT_I2C_WRITE") std::string ServiceNames::formatLink(std::string name) const { - return ((boost::format("ALF_%1%/SERIAL_%2%/LINK_%3%/%4%") % mAlfId % mCruSequence % mLink % name)).str(); + return ((boost::format("ALF_%1%/SERIAL_%2%/LINK_%3%/%4%") % mAlfId % mCardSequence % mLink % name)).str(); } std::string ServiceNames::format(std::string name) const { - return ((boost::format("ALF_%1%/SERIAL_%2%/%3%") % mAlfId % mCruSequence % name)).str(); + return ((boost::format("ALF_%1%/SERIAL_%2%/%3%") % mAlfId % mCardSequence % name)).str(); } } // namespace Alf diff --git a/src/DimServices/ServiceNames.h b/src/DimServices/ServiceNames.h index 7c7abd3..a567811 100644 --- a/src/DimServices/ServiceNames.h +++ b/src/DimServices/ServiceNames.h @@ -29,7 +29,7 @@ class ServiceNames { public: ServiceNames(AlfLink link) - : mAlfId(link.alfId), mCruSequence(link.cruSequence), mLink(link.linkId) + : mAlfId(link.alfId), mCardSequence(link.cardSequence), mLink(link.linkId) { } @@ -40,12 +40,13 @@ class ServiceNames std::string icSequence() const; std::string icGbtI2cWrite() const; std::string patternPlayer() const; + std::string registerSequence() const; private: std::string formatLink(std::string name) const; std::string format(std::string name) const; std::string mAlfId; - const int mCruSequence; + const int mCardSequence; const int mLink; }; diff --git a/src/Ic/Ic.cxx b/src/Ic/Ic.cxx index 4cdbd6b..4d59a66 100644 --- a/src/Ic/Ic.cxx +++ b/src/Ic/Ic.cxx @@ -49,7 +49,7 @@ static constexpr roc::Register IC_WR_CMD(IC_BASE.address + 0x28); static constexpr roc::Register IC_RD_DATA(IC_BASE.address + 0x30); } // namespace ic_regs -Ic::Ic(AlfLink link) : mBar2(*link.bar2), mLink(link) +Ic::Ic(AlfLink link) : mBar2(*link.bar), mLink(link) { setChannel(mLink.linkId); reset(); @@ -166,7 +166,7 @@ std::string Ic::writeSequence(std::vector> ops) } catch (const SwtException& e) { // If an IC error occurs, we stop executing the sequence of commands and return the results as far as we got them, plus // the error message. - std::string meaningfulMessage = (boost::format("ic_regs::IC_SEQUENCE address=0x%08x data=0x%08x cruSequence=%d link=%d, error='%s'") % icData.address % icData.data % mLink.cruSequence % mLink.linkId % e.what()).str(); + std::string meaningfulMessage = (boost::format("ic_regs::IC_SEQUENCE address=0x%08x data=0x%08x cardSequence=%d link=%d, error='%s'") % icData.address % icData.data % mLink.cardSequence % mLink.linkId % e.what()).str(); getErrorLogger() << meaningfulMessage << endm; resultBuffer << meaningfulMessage; BOOST_THROW_EXCEPTION(IcException() << ErrorInfo::Message(resultBuffer.str())); diff --git a/src/Ic/Ic.h b/src/Ic/Ic.h index 352323b..c33f481 100644 --- a/src/Ic/Ic.h +++ b/src/Ic/Ic.h @@ -45,7 +45,7 @@ namespace Alf static constexpr Register IC_RD_DATA(0x0f000030); } // namespace IcRegisters*/ -/// Class for IC(TODO:?) Transactions with the CRU +/// Class for IC Transactions with the CRU class Ic { public: diff --git a/src/Sca/Sca.cxx b/src/Sca/Sca.cxx index bb777b6..5b66ade 100644 --- a/src/Sca/Sca.cxx +++ b/src/Sca/Sca.cxx @@ -37,7 +37,7 @@ namespace Alf // std::map Sca::registers; Sca::Sca(AlfLink link) - : mBar2(*link.bar2), mLink(link) + : mBar2(*link.bar), mLink(link) { if (mLink.linkId >= CRU_NUM_LINKS) { BOOST_THROW_EXCEPTION( @@ -264,11 +264,11 @@ std::string Sca::writeSequence(const std::vector>& op // them, plus the error message. std::string meaningfulMessage; if (it.second == Operation::Command) { - meaningfulMessage = (boost::format("SCA_SEQUENCE cmd=0x%08x data=0x%08x cruSequence=%d link=%d error='%s'") % std::get(data).command % std::get(data).data % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SCA_SEQUENCE cmd=0x%08x data=0x%08x cardSequence=%d link=%d error='%s'") % std::get(data).command % std::get(data).data % mLink.cardSequence % mLink.linkId % e.what()).str(); } else if (it.second == Operation::Wait) { - meaningfulMessage = (boost::format("SCA_SEQUENCE WAIT waitTime=%d cruSequence=%d link=%d error='%s'") % std::get(data) % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SCA_SEQUENCE WAIT waitTime=%d cardSequence=%d link=%d error='%s'") % std::get(data) % mLink.cardSequence % mLink.linkId % e.what()).str(); } else { - meaningfulMessage = (boost::format("SCA_SEQUENCE UNKNOWN cruSequence=%d link=%d error='%s'") % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SCA_SEQUENCE UNKNOWN cardSequence=%d link=%d error='%s'") % mLink.cardSequence % mLink.linkId % e.what()).str(); } getErrorLogger() << meaningfulMessage << endm; resultBuffer << meaningfulMessage; diff --git a/src/Swt/Swt.cxx b/src/Swt/Swt.cxx index a6d05b4..9284753 100644 --- a/src/Swt/Swt.cxx +++ b/src/Swt/Swt.cxx @@ -39,7 +39,7 @@ namespace Alf namespace sc_regs = AliceO2::roc::Cru::ScRegisters; -Swt::Swt(AlfLink link) : mBar2(*link.bar2), mLink(link) +Swt::Swt(AlfLink link) : mBar2(*link.bar), mLink(link) { setChannel(mLink.linkId); } @@ -166,13 +166,13 @@ std::string Swt::writeSequence(std::vector> sequence) // the error message. std::string meaningfulMessage; if (it.second == Operation::Read) { - meaningfulMessage = (boost::format("SWT_SEQUENCE READ timeout=%d cruSequence=%d link=%d, error='%s'") % std::get(data) % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SWT_SEQUENCE READ timeout=%d cardSequence=%d link=%d, error='%s'") % std::get(data) % mLink.cardSequence % mLink.linkId % e.what()).str(); } else if (it.second == Operation::Write) { - meaningfulMessage = (boost::format("SWT_SEQUENCE WRITE data=%s cruSequence=%d link=%d, error='%s'") % std::get(data) % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SWT_SEQUENCE WRITE data=%s cardSequence=%d link=%d, error='%s'") % std::get(data) % mLink.cardSequence % mLink.linkId % e.what()).str(); } else if (it.second == Operation::Reset) { - meaningfulMessage = (boost::format("SWT_SEQUENCE RESET cruSequence=%d link=%d, error='%s'") % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SWT_SEQUENCE RESET cardSequence=%d link=%d, error='%s'") % mLink.cardSequence % mLink.linkId % e.what()).str(); } else { - meaningfulMessage = (boost::format("SWT_SEQUENCE UNKNOWN cruSequence=%d link=%d, error='%s'") % mLink.cruSequence % mLink.linkId % e.what()).str(); + meaningfulMessage = (boost::format("SWT_SEQUENCE UNKNOWN cardSequence=%d link=%d, error='%s'") % mLink.cardSequence % mLink.linkId % e.what()).str(); } getErrorLogger() << meaningfulMessage << endm; resultBuffer << meaningfulMessage;